驗證四方定理

驗證四方定理是數論中的重要定理,它可以敘述為:所有自然數最多只要4個數的平方和就可以表示,編寫一個程式驗證四方定理。

表現形式

驗證四方定理,因此我們可以使用窮舉法,對一個數,先用1一個數的平方和,2個數平方和,3個平方數的平方和,4個數的平方和進行驗證。如果成功返回1,失敗返回0;當窮舉完所有情況後,就可以驗證四方定理了,代碼如下:

#include <stdio.h>

#include <math.h>

int mode_1(int n)

{

if((int)sqrt(n) * (int)sqrt(n) == n){

printf("%d * %d = %d \n",(int)sqrt(n),(int)sqrt(n),n);

return 1;

}

else{

return 0;

}

}

int mode_2(int n)

{

int x,y;

for(x=1; x<sqrt(n); x++)

for(y=x; y<sqrt(n); y++){

if(x*x + y*y == n){

printf("%d^2 + %d^2 = %d\n",x,y,n);

return 1;

}

}

return 0;

}

int mode_3(int n)

{

int x,y,z;

for(x=1; x<sqrt(n); x++)

for(y=x; y<sqrt(n); y++)

for(z=y; z<sqrt(n); z++){

if(x*x + y*y + z*z == n){

printf("%d^2 + %d^2 + %d^2 = %d\n",x,y,z,n);

return 1;

}

}

return 0;

}

int mode_4(int n)

{

int x,y,z,t;

for(x=1; x<sqrt(n); x++)

for(y=x; y<sqrt(n); y++)

for(z=y; z<sqrt(n); z++)

for(t=z; t<sqrt(n); t++)

if(x*x + y*y + z*z + t*t == n){

printf("%d^2 + %d^2 + %d^2 + %d^2 = %d\n",x,y,z,t,n);

return 1;

}

return 0;

}

void proveFourSquares(int n)

{

if(mode_1(n))

printf("it has verified four squares\n");

else if(mode_2(n))

printf("it has verified four squares\n");

else if(mode_3(n))

printf("it has verified four squares\n");

else if(mode_4(n))

printf("it has verified four squares\n");

}

int main(int argc, char *argv[])

{

int n;

printf("please input a natural number\n");

scanf("%d",&n);

printf("--------------------------\n");

proveFourSquares(n);

return 0;

}

執行結果

如下:

peng@ubuntu:~/src/test/c/suanfa/miaoqu$ gcc 6.5.c -lm

peng@ubuntu:~/src/test/c/suanfa/miaoqu$ ./a.out

please input a natural number

120

--------------------------

2^2 + 4^2 + 10^2 = 120

it has verified four squares

peng@ubuntu:~/src/test/c/suanfa/miaoqu$ ./a.out

please input a natural number

10

--------------------------

1^2 + 3^2 = 10

it has verified four squares

相關詞條

熱門詞條

聯絡我們