• 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, i, n-i);
            else
                printf("Goldbach's conjecture is wrong.
    ");
        }
    
        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;  
    }  


  • 相关阅读:
    MapReduce实例
    hadoop 分布式安装
    redis缓存
    Flink初始
    Flume初始
    大数据学习之路(持续更新中...)
    使用VisualVM分析性能
    JVM的理解
    Java日记
    UI笔记2
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564591.html
Copyright © 2020-2023  润新知