zoukankan      html  css  js  c++  java
  • 验证哥德巴赫猜想(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;//是质数
        }
    }
    
    
  • 相关阅读:
    11.06第十次作业
    (构造方法私有化、this)10.29练习题
    10.23创造人
    10.16(RuPeng)游戏
    10.09
    作业9.25
    练习题
    (随机数之和)求一整数各位数之和1636050052王智霞
    两点之间的距离1636050052王智霞
    TabLayout 简单使用。
  • 原文地址:https://www.cnblogs.com/yuzilan/p/10626181.html
Copyright © 2011-2022 走看看