博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
16省8-四平方和(四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和。 如果把0包括进去,就正好可以表示为4个数的平方和。 比如:)
阅读量:3960 次
发布时间:2019-05-24

本文共 1150 字,大约阅读时间需要 3 分钟。

问题描述

四平方和定理,又称为拉格朗日定理:

每个正整数都可以表示为至多4个正整数的平方和。
如果把0包括进去,就正好可以表示为4个数的平方和。

比如:

5 = 0^2 + 0^2 + 1^2 + 2^2
7 = 1^2 + 1^2 + 1^2 + 2^2
(^符号表示乘方的意思)

对于一个给定的正整数,可能存在多种平方和的表示法。

要求你对4个数排序:
0 <= a <= b <= c <= d
并对所有的可能表示法按 a,b,c,d 为联合主键升序排列,最后输出第一个表示法

程序输入为一个正整数N (N<5000000)

要求输出4个非负整数,按从小到大排序,中间用空格分开。
例子
输入

5

输出

0 0 1 2

输入

12

输出

0 2 2 2

输入

773535

输出

1 1 267 838

题目限制

单输出时间限制< 1s

峰值内存消耗 < 256M
CPU消耗 < 3000ms

思路:作为蓝桥省赛的第8题,略显简单,暴力循环解决就ok了,但是题目要求限制在1s内,因此设置循环条件的时候要多加注意。

代码如下;

#include 
int main (){
int a,b,c,d; int sum=0; int n; scanf("%d",&n); for(a=0;a<50;a++) {
int flag=0; sum=0; if(a*a>n)continue;//加这些条件是为了避免多余的计算,减少运行时间 for(b=a;b<500;b++) {
if(b*b>n)continue;//加这些条件是为了避免多余的计算,减少运行时间 for(c=b;c<5000;c++) {
if(c*c>n)continue;//加这些条件是为了避免多余的计算,减少运行时间 for(d=c;d<50000;d++) {
sum=a*a+b*b+c*c+d*d;; if(sum==n) {
printf("%d %d %d %d\n",a,b,c,d); return 0; } if(sum>n) {
break; flag=1; } } if(flag==1)break;//加这些条件是为了避免多余的计算,减少运行时间 } if(flag==1)break;//加这些条件是为了避免多余的计算,减少运行时间 } if(flag==1)break;//加这些条件是为了避免多余的计算,减少运行时间 } }

运行示例

在这里插入图片描述

转载地址:http://rjrzi.baihongyu.com/

你可能感兴趣的文章
go - 运行时:内存不足
查看>>
top 使用
查看>>
Linux Netlink通信机制详解
查看>>
rsync 远程同步
查看>>
nano使用
查看>>
c函数
查看>>
linux 链接
查看>>
centos6.x 添加开机启动服务
查看>>
zfs 简单使用
查看>>
linux EXT4格式分区扩容
查看>>
实现 du 命令
查看>>
git revert reset 使用
查看>>
一些比较好的golang安全项目
查看>>
HTTP状态码
查看>>
go语言
查看>>
mysql mariaDB 以及存储引擎
查看>>
游戏行业了解介绍
查看>>
linux at 命令使用
查看>>
Go在windows下执行命令行指令
查看>>
inotify
查看>>