• 验证哥德巴赫猜想(C++)


    哥德巴赫猜想:
    1)任一不小于6的偶数,都可以表示成两个奇质数之和
    2)任一不小于9的奇数,都可以表示成三个奇质数之和

    欧拉也提出另一个等价版本,即任一大于2的偶数都可写成两个质数之和。欧拉的命题比哥德巴赫的命题要求更高。现通常把这两个命题统称为哥德巴赫猜想。

    算法:
    将6~n以内的偶数分解为两个质数之和
    设n=n1+n2

    1. 令n1=3~n/2
    2. 若n1是质数,则令n2=n-n1;否则n1++,再转2
    3. 若n2是质数,则分解式已找到,否则,令n1++,再转2

    代码:

    #include <iostream>
    #include <math.h>
    using namespace std;
    void divide(int);
    int isPrime(int);
    
    int main()
    {
        int i,n;
        cout<<"请输入一个大于6的整数:";
        cin>>n;
        if(n<6) return 0;
        for(i=6;i<=n;++i)//从 6到 n,每个数都判断一次
            divide(i);
        return 0;
    }
    
    void divide(int n)
    {
        int i,m;
        for(i=3;i<n/2;++i)
        {
            if(isPrime(i)==0) continue;//i不是质数
            m=n-i;
            if(isPrime(m)!=0) break;//m是质数
        }
        if(i>n/2)
            cout<<"哥德巴赫猜想不成立";
        cout<<n<<"="<<i<<"+"<<m<<endl;
    }
    
    int isPrime(int n)//判断质数
    {
        int i;
        for(i=2;i<=sqrt(n);++i)//循环根号n次即可
        {
            if(n%i==0) return 0;//不是质数
            return 1;//是质数
        }
    }
    
    
  • 相关阅读:
    Java学习心得16
    Java学习心得15
    Java学习心得14
    Java学习心得13
    Java学习心得12
    Java学习心得11
    Java学习心得10
    Java学习心得09
    Java学习心得08
    JVM垃圾回收
  • 原文地址:https://www.cnblogs.com/yuzilan/p/10626181.html
Copyright © 2020-2023  润新知