1.实验题目

1.7【问题描述】

第四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多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个非负整数,按从小到大排序,中间用空格分开

输入范例1】 5

输出范例1】0 0 1 2

输入范例2】773535

输出范例2】1 1 267 838

2.需求分析

本演示程序用VC++6.0编写,完成一个数经过拉格朗日定理所得结果。
① 输入的形式和输入值的范围:一个正整数N (N<5000000)。在所有输入中,元素的值都是整数
② 输出的形式:4个非负整数,按从小到大排序,中间用空格分开。
③ 程序所能达到的功能:每个正整数都可以表示为至多4个正整数的平方和,找出其4个正整数

④ 测试数据:
输入范例1】 5

输出范例1】0 0 1 2

输入范例2】773535

输出范例2】1 1 267 838

3.概要设计

1)为了实现上述程序功能,需要定义函数,主函数调用来实现:

int f(int n)

{

int a,b,c,d;

先定义四个形参;
2)本程序包含2个函数:
① 主函数main()
② 求4个正整数函数int f(int n)
各函数间关系如下:
main()             int f(int n)

4.详细设计

#include<stdio.h>

#include<math.h>

int MAX=(int)sqrt(5000000);          //利用最大值的开方数,使用sqrt函数

int f(int n)

{

int a,b,c,d;

for(a=0;a<=MAX;a++)          //5000000的开方数为MAX,a作为最外层的循环,即0<=a<=b<=c<=d,升序

{if(a*a>n)continue;      //满足a*a>n则结束此次循环,跳到下一语句

for(b=a;b<=MAX;b++)

{if(a*a+b*b>n)continue;     //满足a*a+b*b>n即结束此次循环

for(c=b;c<=MAX;c++)

{if(a*a+b*b+c*c>n)continue;  //满足a*a+b*b+c*c>n即结束此次循环

for(d=c;d<=MAX;d++)    //d变化最快

{if(a*a+b*b+c*c+d*d>n)continue;   //满足a*a+b*b+c*c+d*d>n即结束此次循环

if(a*a+b*b+c*c+d*d!=n)continue;//判断4个正整数的平方和是否等于n,不等就结束此次循环

printf("%d %d %d %d\n",a,b,c,d);

return 0;               //输出满足条件的第一个表示法

}

}

}

}

return 0;

}

void main()

{

int n;

printf("请输入N值:");

scanf("%d/n",&n);         //输入一个整数

if(n<0||n>5000000)        //根据题目要求的范围

printf("输入的N值不在范围内!\n");

else f(n);

}

5.调试分析
#include<stdio.h>

#include<math.h>

int MAX=(int)sqrt(5000000);

int f(int n)

{

int a,b,c,d;

for(a=0;a<=MAX;a++)

{if(a*a>n)continue;

for(b=a;b<=MAX;b++)

{if(a*a+b*b>n)continue;

for(c=b;c<=MAX;c++)

{if(a*a+b*b+c*c>n)continue;

for(d=c;d<=MAX;d++)

{if(a*a+b*b+c*c+d*d>n)continue;

if(a*a+b*b+c*c+d*d!=n)continue;

printf("%d %d %d %d\n",a,b,c,d);

return 0;

}

}

}

}

return 0;

}                                 //时间复杂度T(n)=O(n^4),空间复杂度S(n)=O(1)

void main()

{

int n;

printf("请输入N值:");

scanf("%d/n",&n);

if(n<0||n>5000000)

printf("输入的N值不在范围内!\n");

else f(n);

}

调试时,先进入main()函数,然后执行输出语句来进行提示,执行输入语句,再根据判断输入的n值来执行相应的语句,要是是1就输出“输入的N值不在范围内!”,要是0即调用f(n)函数。f(n)函数有四重循环,最外层为a的循环,接下来就是b,c,d。实现0 <= a <= b <= c <= d ,再根据判断四个数的平方和是否等于n,不等就结束此次循环,要是相等就输入结果,输出第一个就执行return 0语句,结束输出。

6.使用说明

程序名为1.exe,运行环境为VC++6.0。程序执行后显示

根据提示,在第一行先输入一个正整数N (N<5000000),点击换行,下一行输出结果。

7.测试结果

1) 建立函数:
» 输入:5

输出:0 0 1 2

» 输入:773535

输出:1 1 267 838

» 输入:0

输出:输入的N值不在范围内!

第四平方和定理,用c语言实现相关推荐

  1. C语言编程四平方和定理,第四平方和定理,用c语言实现

    1.实验题目 1.7[问题描述] 第四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和.  如果把0包括进去,就正好可以表示为4个数的平方和.比如:5 = 0^2 + 0^ ...

  2. 拉格朗日四平方和定理c语言,费马平方和定理 拉格朗日四平方和定理

    费马平方和定理 费马平方和定理:奇质数能表示为两个平方数之和的充分必要条件是该质数被4除余1.第一步 "如果两个整数都能表示为两个平方数之和,则它们的积也能表示为两个平方数之和." ...

  3. Pollard_rho大数质因数分解+拉格朗日四平方和定理(bzoj 2904: 平方和)

    2904: 平方和 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 160  Solved: 73 [Submit][Status][Discuss] ...

  4. 拉格朗日四平方和定理

    目录 一,拉格朗日四平方和定理 二,证明过程 三,推论 四,OJ实战 CSU 1404 Four-square Theorem 力扣 279. 完全平方数 一,拉格朗日四平方和定理 每个正整数均可表示 ...

  5. xjoi 1542 玩玩拉格朗日四平方和定理

    题目描述: 拉格朗日四平方和定理: 每一个非负整数都可以表示成四个非负整数的平方和. 例如 5 = 0^2 + 0^2 + 1^2 + 2^2 给定一个正整数n,请你将n拆成 a^2+b^2+c^2+ ...

  6. 四平方和定理(拉格朗日定理)

    题目 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和. 如果把0包括进去,就正好可以表示为4个数的平方和. 比如: 5 = 0^2 + 0^2 + 1^2 + 2^2 ...

  7. 【LeetCode】279. 完全平方数 【动态规划】【四平方和定理】

    题目链接:https://leetcode-cn.com/problems/perfect-squares/ 题目介绍 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使 ...

  8. leetcode279 拉格朗日四平方和定理

    给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少. 输入: n = 12 输出: 3 解释: 12 = 4 + ...

  9. 四平方和定理_简化循环

    . 四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多四个正整数的平方和.如果把 00 包括进去,就正好可以表示为四个数的平方和. 比如: \displaystyle 5 = 0^2 + 0 ...

最新文章

  1. 201671010128 2017-11-12《Java程序设计》之图形程序设计
  2. C#Windows服务程序安装常见问题解决方法
  3. Origin对于标注点
  4. 矩阵的逆以及实际应用
  5. 【收藏】Vue中ref和$refs的介绍及使用
  6. 线性结构 —— 单调栈与单调队列
  7. 在CentOS7上安装RocketMQ 4.8.0
  8. mac配置supervisor笔记
  9. Qt学习之路1---软件下载安装及工程简介
  10. 程序员的底色(IDE color scheme、CLI 命令行界面)
  11. 【已解决】Maven更改本地默认仓库时遇到的问题。 No implementation for org.apache.maven.model.path.PathTranslator was bound
  12. app.honeycomb.Shell$HomeActivity failed to start
  13. oracle ogg下载安装,牛刀小试Oracle GoldenGate--OGG安装(一)
  14. java全栈开发工程师_谈谈我对Java(J2EE)全栈工程师的理解
  15. DM8 Linux服务注册
  16. 每日3词 2021-03-08 【reference】【print】【coding】
  17. java mail类_Java Mail工具类
  18. Java菜鸟到大牛学习路线之高级篇
  19. uva490解题报告
  20. C# 委托学习笔记(一)

热门文章

  1. 采用HTML,CSS,JAVASCRIPT的前端网页设计的内容展示
  2. FATE联邦学习初探(二)
  3. 动态网站基本上都是有后台的,静态的网站就是纯HTML的网站的,这样的网站是没有后台的
  4. 哪些平台可以查看医学类文献?
  5. 【网盘项目日志】Seafile 源码部署和安装命令
  6. it-tidalwave-semantic-aux-1.0.5.jar下载
  7. 计算机网络公众号,计算机网络中写公众号文章的软件有哪些
  8. Windows 7下载
  9. ubuntu安装zlib
  10. 发布两款超1级能效空调 再次腰斩行业价 苏宁小Biu点燃空调市场