今天晚上的火车回家啦。所以提前更出来~。愉快的收拾我的包裹~滚回家吃半个月~胖几斤又要回学校啦~
T T这个假期虽然很忙。但是我觉得很有意义。很有价值~爱你们~
描述
验证“歌德巴赫猜想”,即:任意一个大于等于6的偶数均可表示成两个素数之和。
输入
输入只有一个正整数x。(x<=2000)输出如果x不是“大于等于6的偶数”,则输出一行:
Error!
否则输出这个数的所有分解形式,形式为:
x=y+z
其中x为待验证的数,y和z满足y+z=x,而且y<=z,y和z均是素数。
如果存在多组分解形式,则按照y的升序输出所有的分解,每行一个分解表达式。
注意输出不要有多余的空格。
样例输入
输入样例1: 7 输入样例2: 10 输入样例3: 100
样例输出
输出样例1: Error! 输出样例2: 10=3+7 10=5+5 输出样例3: 100=3+97 100=11+89 100=17+83 100=29+71 100=41+59 100=47+53
代码如下
1 #include <cstdio> 2 #include <cmath> 3 int primenumber(int kk){ 4 int i; 5 int k=(int)sqrt(kk); 6 for(i=2;i<=k;i++){ 7 if(kk%i==0) 8 break; 9 } 10 if(i<=k){ 11 return 0; 12 }else{ 13 return 1; 14 } 15 } 16 int main() 17 { 18 int x; 19 scanf("%d",&x); 20 for(int y=2;y<=x/2;y++){ 21 if(x<6||x%2!=0){ 22 printf("Error! "); 23 break; 24 } 25 int z=x-y; 26 if(primenumber(y)&&primenumber(z)){ 27 printf("%d=%d+%d ",x,y,z); 28 } 29 } 30 31 return 0; 32 }
思路解析
枚举,并判断y与z是否为素数。小心素数的判定即可。不要把1算上。