四方定理验证问题
数论中有著名的四方定理:所有自然数至多只要用四个数的平方和就可以表示。
- C/C++ code
#include <stdio.h>#include <math.h>int f(int n, int a[], int idx){ if(a[0]*a[0]+a[1]*a[1]+a[2]*a[2]+a[3]*a[3] == n) return 1; // 填空1 if(idx==4) return 0; for(int i=(int)sqrt(n); i>=1; i--) { a[idx] = i; if(f(n, a, idx+1)) return 1; // 填空2 } return 0;}int main(int argc, char* argv[]){ for(;;) { int number; getchar(); printf("输入整数(1~10亿):"); scanf("%d",&number); int a[] = {0,0,0,0}; int r = f(number, a, 0); printf("%d: %d %d %d %d\n", r, a[0], a[1], a[2], a[3]); } return 0;}这段代码能实现四方定理的验证吗?为什么本人测试有以下一组数据会出现 四个1
5,6,11,14,17,24,29,32,41.。。。
[解决办法]
根据代码,函数f返回0表示没有找到解,输出
0: 1 1 1 1
因此,该程序不能对你的测试数据给出解。