蓝桥杯 大数定理

标题:四方定理

数论中有著名的四方定理:所有自然数至多只要用四个数的平方和就可以表示。

我们可以通过计算机验证其在有限范围的正确性。

对于大数,简单的循环嵌套是不适宜的。下面的代码给出了一种分解方案。

#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;
} 
原文地址:https://www.cnblogs.com/sky-z/p/4415035.html