POJ2262 ZOJ1951 UVa543 Goldbach's Conjecture

来源:互联网 发布:手机淘宝怎么代购 编辑:程序博客网 时间:2024/05/16 17:20

问题链接:POJ2262 ZOJ1951 UVa543 Goldbach's Conjecture。基础训练级的题,用C语言编写程序。

这个问题是验证哥德巴赫猜想,对于输入的n,找出一对差值最大的奇素数。

使用穷举法来解决这个问题。

目前POJ使用的C语言编译器,似乎比较古老,在别处可以编译通过的代码,在它这里编译错误。

AC的C语言程序如下:

/* POJ2262 ZOJ1951 UVa543 Goldbach's Conjecture */#include <stdio.h>#include <math.h>#define MAXN 1000000// 试除法判断一个数是否为素数int isprime(int n){    int end2, i;    if(n == 3)        return 1;    end2 = sqrt(n);    for(i=3; i<=end2; i+=2) {        if(n % i == 0)            break;    }    return i > end2 ? 1 : 0;}int main(void){    int n;    int okflag, i;    while(scanf("%d", &n) != EOF) {        // 判定结束条件        if(n == 0)            break;        // 寻找素数        okflag = 0;        for(i=3; i<=n/2; i+=2)            if(isprime(i) && isprime(n-i)) {                okflag = 1;                break;            }        // 输出结果        if(okflag)            printf("%d = %d + %d\n", n, i, n-i);        else            printf("Goldbach's conjecture is wrong.\n");    }    return 0;}

POJ中,编译错误的代码(第10行):
// 试除法判断一个数是否为素数  int isprime(int n)  {      if((n & 1) == 0)  // 偶数:n % 2 == 0          return 0;        if(n == 3)          return 1;        int end = sqrt(n), i;      for(i=3; i<=end; i+=2) {          if(n % i == 0)              break;      }        return i > end ? 1 : 0;  }  


1 0
原创粉丝点击