蓝桥杯 大数定理
标题:四方定理
数论中有著名的四方定理:所有自然数至多只要用四个数的平方和就可以表示。
我们可以通过计算机验证其在有限范围的正确性。
对于大数,简单的循环嵌套是不适宜的。下面的代码给出了一种分解方案。
#include<stdio.h> #include<math.h> int f(int n,int a[],int idx){ if(n==0) return 1; //恰好等于 0,则说明恰好等于某几位的平方和 if(idx==4) return 0; //超过四位数字 返回 0,不符合要求 for(int i=(int)sqrt(n);i>=1;i--){ a[idx]=i; if(f(n-i*i,a,idx+1)) //满足要求 return 1; //在这个地方正式退出程序 } return 0; //没有满足要求的数字和 } int main(){ for(;;){ int number; scanf("%d",&number); int a[]={0,0,0,0}; //初始化数组全部为0 int r=f(number,a,0); printf("%d:%d %d %d %d",r,a[0],a[1],a[2],a[3]); } return 0; }