注册 登录
编程论坛 C++教室

关于哥德巴赫猜想的小程序,证明一个不小于6的偶数是两个奇素数之和

蓝色的blue 发布于 2013-11-07 22:27, 816 次点击
我写了一个证明哥德巴赫猜想的程序,但运行之后好像有bug,问题就是好像并不是总能把所有满足的素数找出来。比如我输入1636但运行结果少了一组“17+1619=1636”,我今天调试了两个小时还是没法找到bug,请各位大牛能在百忙之中抽出一点空帮看一下。。谢谢。。代码如下:
#include<iostream>
using namespace std;
int gotbaha(int n)
{
    bool test=true;
    bool quit=true;
    for(int i=2;i<n;i++)
    {
        if(i%2!=0)
        {
            for(int j=2;j<i;j++)
            {
                if(i%j==0)
                {
                    quit=false;
                    break;
                }
            }
            if(quit)
            {
                for(int j=1;j<n;j++)
                {
                    if(j%2!=0)
                    {
                        for(int k=2;k<j;k++)
                        {
                            if(j%k==0)
                            {
                                test=false;
                                break;
                            }

                        }
                    }
                    if(i+j==n)
                        cout<<n<<"="<<i<<"+"<<j<<endl;
                }
            }
        }
    }
    return 0;
}
int main()
{



    int n;



    int gotbaha(int);



    cin>>n;



    gotbaha(n);



    return 0;



}
7 回复
#2
anthow2013-11-08 01:10
写一个判断是否为素数的函数不是好一点么,,,,而且最好限制一下不能输入奇数
#3
heroinearth2013-11-08 08:47
程序代码:
#include<iostream>
using namespace std;

int gotbaha(int n)
{
    bool test=true;
    bool quit=true;
    for(int i=2;i<n;i++)
    {
        if(i%2!=0)
        {
            for(int j=2;j<i;j++)
            {
                if(i%j==0)
                {
                    quit=false;
                    break;
                }
            }
            if(quit)
            {
                for(int j=1;j<n;j++)
                {
                    if(j%2!=0)
                    {
                        for(int k=2;k<j;k++)
                        {
                            if(j%k==0)
                            {
                                test=false;
                                break;
                            }
                        }
                    }
                    if(i+j==n)
                        cout<<n<<"="<<i<<"+"<<j<<endl;
                }
            }
            quit=true;//这两个变量被修改后没还原
            test=true;//
        }
    }
    return 0;
}
int main()
{
    int n;
    int gotbaha(int);
   
    cin>>n;
    gotbaha(n);
    system("pause");
    return 0;
}
#4
编程学霸2013-11-08 15:41
好厉害的样子
#5
peach54602013-11-08 16:22
以下是引用编程学霸在2013-11-8 15:41:38的发言:

好厉害的样子

居然是个女性头像...
#6
蓝色的blue2013-11-08 19:11
回复 3楼 heroinearth
谢谢。。。
#7
蓝色的blue2013-11-08 19:17
回复 3楼 heroinearth
我的声明的test布尔变量好像没有用处?但我一旦把if(i+j==n);语句改为if(test&&i+j==n);输出结果好像又不行了。请问大牛为什么呢?怎么办?
#8
sh3166301032013-11-09 20:50
1