新手入门:关于c++中判断2000以内哥德巴赫猜想成立的方法

来源:互联网 发布:惠普1513驱动for mac 编辑:程序博客网 时间:2024/05/16 05:33

           哥德巴赫在1742年给欧拉的信中提出了以下猜想:任一大于2的偶数都可写成两个质数之和。这也就是著名的哥德巴赫猜想。

        这个猜想在如今都很难被证明。因此,我以一名计算机初学者的身份编写了一段最基础的代码,来判断限定范围(2000以内)哥德巴赫猜想成立。

        先挂上代码:

#include <iostream>
using namespace std;
//求2000以内哥德巴赫猜想的代码 


//判断一个数是不是素数
int judge1(int x)
{
int n;
bool result=true;

for(n=2;n<x;n++)
{
if (x%n==0)
{
result=false;
break;
}
}
return result;

 
//判断一个偶数为两个素数之和
int judge2(int y)
{
int a,b;
bool respond=false;

for (a=1;a<=y;a++)
{
   b=y-a;
   if(judge1(a)==true&&judge1(b)==true)
   respond=true;
         }
   
    return respond;
    



int main()
{
int m;
bool c=true;
cout<<"求哥德巴赫猜想在2000以内成立吗?"<<endl;

for (m=1;m<=1000;m++)
{
      if (judge2(2*m)==false)
   c=false;
         }
    
if (c=1)
 cout<<"这个猜想成立"<<endl;
if (c=0)
 cout<<"这个猜想不成立"<<endl; 

}

        整段代码分为两个部分:主函数及自定义函数。自定义函数中包含判断是否为素数的函数“judge1”和判断一个偶数是否为两个素数之和的函数“judge2”

        要证明哥德巴赫猜想成立,首先得输入一个数,然后判断这个数是否可以分别为两个素数之和。然而在这之前还得判断什么数是素数。

        由于初学者的身份,对于很多c++中技巧掌握不熟练,暂时想到的是编写一段函数来判断一个数是不是素数,

        即judge1:

       

         对于任意一个数n,如果它不能被2~(n-1)间的任意一个数整除,那么它就是素数。


        (要实现判断,先定义一个bool变量为true,之后开始循环,如果循环中能找到这样的一个数,就返回false;如果循环完后都没发现这样的一个数,就返回true)

        judge2的任务是:


        将任意一个数n拆分成1与n-1,2与n-2,3与n-3.......等一系列数,然后判断其中是否有一组数满足两个数都是素数。因此可以定义一个bool变量为false,然后开始拆分,如果碰到这样的一组数,就返回true。


        主函数输入从1开始到2000的任意一个数,并从1开始进行判断。因此先设定一个bool变量为true,如果1~2000内任意一个数的judge2结果为false,那么主函数的bool变量返回false,并结束循环,输出“哥德巴赫猜想在2000以内不成立”;否则输出“哥德巴赫猜想在2000以内成立”。


        以上代码在很多地方都有需要优化的地方,比如说judge1中,可以将n-1变成根号n,再如judge2中,拆分方法也可以优化。这些方面我会在日后的学习中掌握。

2 0
原创粉丝点击