POJ_3143 验证“歌德巴赫猜想”

时间:2021-02-10 03:52:48

今天晚上的火车回家啦。所以提前更出来~。愉快的收拾我的包裹~滚回家吃半个月~胖几斤又要回学校啦~

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

代码如下

 #include <cstdio>
#include <cmath>
int primenumber(int kk){
int i;
int k=(int)sqrt(kk);
for(i=;i<=k;i++){
if(kk%i==)
break;
}
if(i<=k){
return ;
}else{
return ;
}
}
int main()
{
int x;
scanf("%d",&x);
for(int y=;y<=x/;y++){
if(x<||x%!=){
printf("Error!\n");
break;
}
int z=x-y;
if(primenumber(y)&&primenumber(z)){
printf("%d=%d+%d\n",x,y,z);
}
} return ;
}

思路解析

枚举,并判断y与z是否为素数。小心素数的判定即可。不要把1算上。