zoukankan      html  css  js  c++  java
  • HDU1262 寻找素数对

    问题链接HDU1262 寻找素数对

    问题简述参见上述链接。

    问题分析对于输入的偶数,先求得其一半的值,若不为奇数则减去1,然后从这个奇数开始从大到小用奇数试探。根据哥德巴赫猜想,一个偶数可以分解为两个素数之和,其中一个必然小于或等于这个偶数的一半。

    有了上述的一个奇数p,对于输入的m来说,另外一个奇数就是m-p。

    只要测试这两个奇数都是素数,就得到了差距最小的两个素数,输出即可。

    程序说明(略)。

    AC的C语言程序如下:

    /* HDU 1262 寻找素数对 */
    
    #include <stdio.h>
    #include <math.h>
    
    int isprime(int n)
    {
        if(n == 3)
            return 1;
    
        int temp, i;
        temp = n % 6;
        if(temp != 1 && temp != 5)
            return 0;
    
        temp = sqrt(n);
        for(i=3; i<=temp; i+=2)
            if(n % i == 0)
                return 0;
    
        return 1;
    }
    
    int main(void)
    {
        int m, p;
    
        while(scanf("%d",&m)!=EOF) {
            p = m / 2;
            if(p % 2 == 0)
                p--;
    
            for(;;) {
                if(p <= 2)
                    break;
                if(!isprime(p)) {
                    p -= 2;
                    continue;
                }
                if(isprime(m - p)) {
                    printf("%d %d
    ", p, m-p);
                    break;
                }
    
                p -= 2;
            }
        }
    
        return 0;
    }


  • 相关阅读:
    第三章,DNA序列的进化演变
    哈迪-温伯格定律和近亲杂交
    mysql
    Dajngo admin使用
    Django之Form组件
    python三大器
    python函数
    python文件操作
    python字典和集合
    算法基础
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564875.html
Copyright © 2011-2022 走看看