满足条件的数的连续性问题的计算
将1到100的这100个数,每个数都分解为两个整数的平方之和,如果满足该条件,就将满足该条件的数打印出来。同时计算如果有两个数相邻(比如17和18,25和26,40和41等等)它们都可以分解为两个整数的平方之和,就说它们相邻(程序里用a来表示有多少个这样的数相邻),程序代码编写如下:程序代码:
#include "stdio.h" main() { int x,y,i,a=0; printf("将一个数分成两个数的平方之和的连续性:"); printf("\n"); for(i=1;i<=100;i++) { for(x=1;x<=50;x++) { for(y=x;y<=50;y++) { if(i!=x*x+y*y) a=0; else { printf("%d=%d^2+%d^2",i,x,y); a=a+1; printf(" a=%d\n",a); } } } } }
为啥程序运行后a值都是1,它没有根据具体情况而给出相应的值呢?
希望达到如下效果:
将一个数分成两个数的平方之和的连续性:
2=1^2+1^2 a=1
5=1^2+2^2 a=1
8=2^2+2^2 a=1
10=1^2+3^2 a=1
13=2^2+3^2 a=1
17=1^2+4^2 a=1
18=3^2+3^2 a=2
20=2^2+4^2 a=1
25=3^2+4^2 a=1
26=1^2+5^2 a=2
29=2^2+5^2 a=1
32=4^2+4^2 a=1
34=3^2+5^2 a=1
37=1^2+6^2 a=1
40=2^2+6^2 a=1
41=4^2+5^2 a=2
45=3^2+6^2 a=1
50=1^2+7^2 a=1
50=5^2+5^2 a=1
52=4^2+6^2 a=1
53=2^2+7^2 a=2
58=3^2+7^2 a=1
61=5^2+6^2 a=1
65=1^2+8^2 a=1
65=4^2+7^2 a=1
68=2^2+8^2 a=1
72=6^2+6^2 a=1
73=3^2+8^2 a=2
74=5^2+7^2 a=3
80=4^2+8^2 a=1
85=2^2+9^2 a=1
85=6^2+7^2 a=1
89=5^2+8^2 a=1
90=3^2+9^2 a=2
97=4^2+9^2 a=1
98=7^2+7^2 a=2
100=6^2+8^2 a=1
这里17和18是相邻的数,所以 18=3^2+3^2 a=2
后面还有25和26,40和41,道理相同。
如果有三个数相邻,那么a=3.
[此贴子已经被作者于2019-8-21 13:27编辑过]