POJ2262 ZOJ1951 UVa543 Goldbach's Conjecture
问题链接: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;  
}   
                    
                     
                    
                 
                    
                 
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号