POJ_3143 验证“歌德巴赫猜想”

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

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算上。

原文地址:https://www.cnblogs.com/xzt6/p/5735707.html