• 验证哥德巴赫猜想(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;//是质数
        }
    }
    
    
  • 相关阅读:
    C/C++中的内存对齐 C/C++中的内存对齐
    Java编程提高性能时需注意的地方
    微软HoloLens技术解谜
    MySQL索引原理及慢查询优化
    mysql 2006
    第9周个人总结
    第十周任务安排
    下一阶段学习安排
    写在软考弃考之后
    第九周任务安排
  • 原文地址:https://www.cnblogs.com/yuzilan/p/10626180.html
Copyright © 2020-2023  润新知