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

一道关于哥德巴赫的程序,请高手指导

dxp44444 发布于 2011-08-26 15:12, 312 次点击
程序代码:
#include <iostream>

using namespace std;

int num;

int prime(int a)
{
    int flag = 1;
    for(int s = 2; s <= (a / 2) && flag == 1; s++)   
    {
        if (a % s == 0)
            flag = 0;
    }   
    return flag;
   
}

void gotbaha(int a)
{
    int a1 = 0, a2 = 0, n = 0;
    for(a1 = 1; a1 <= (a - 1) / 2; a1++)
    {
        a2 = num - a1;
        if(prime(a1) && prime(a2))
        {
            cout << num << " = " << a1 << " + " << a2 << endl;
            n = n + 1;
        }
    }
    cout << "共有" << n << " 种解法!" << endl;
}

int main(void)
{
    cout << "请输入一个大于6的整数:";
    cin >> num;

    if (num < 6)
    {
        cout << "您输入的数字不符合要求!" << endl;
        cout << "请重新输入: ";
        cin >> num;
    }
    else
    {
        gotbaha(num);
    }
    return 0;
}
输入很多数都能正常过,但输入255时竟然无解,不知何故,请高手指导

[ 本帖最后由 dxp44444 于 2011-8-26 15:14 编辑 ]
3 回复
#2
dxp444442011-08-26 15:24
呀,原来只能输入偶数,对不起,呵呵

[ 本帖最后由 dxp44444 于 2011-8-26 15:26 编辑 ]
#3
dxp444442011-08-26 15:48
程序代码:
#include <iostream>

using namespace std;

int num;

int prime(int a)
{
    int flag = 1;
    for(int s = 2; s <= (a / 2) && flag == 1; s++)   
    {
        if (a % s == 0)
            flag = 0;
    }   
    return flag;
   
}

int gotbaha(int a)
{
    int a1 = 0, a2 = 0, n = 0;
    for(a1 = 1; a1 <= a / 2; a1++)
    {
        a2 = num - a1;
        if(prime(a1) && prime(a2))
        {
            cout << num << " = " << a1 << " + " << a2 << endl;
            n = n + 1;
        }
    }
    cout << "共有" << n << " 种解法!" << endl;
    return n;
}

int gotbaha1(int a)
{
    int a1 = 0, a2 = 0, n = 0;
    for(a1 = 1; a1 <= ((a / 2) + 1); a1++)
    {
        a2 = num - a1;
        if(prime(a1) && prime(a2))
        {
            n = n + 1;
        }
    }
    return n;
}

int main(void)
{
    cout << "请输入一个大于6的偶数:";
    cin >> num;
   
    while((num < 6) || (num % 2 == 1))
    {
        cout << "您输入的数字不符合要求!" << endl;
        cout << "请重新输入: ";
        cin >> num;
    }

    gotbaha(num);

    int nmax, fin = 0;
    cout << "请输入最大搜索范围:";
    cin >> nmax;
    for (int s = 6; s <= nmax; s = s +2)
    {
        if(gotbaha1(s) == 0)
        {
            fin = fin + 1;
            cout << s << "\t";
        }
    }
    if(fin == 0)
        cout << "没有不符合的数字!" << endl;

    return 0;
}
重新修改了下,还请各位大大指教!谢谢
#4
stophin2011-08-28 11:48
我虽然不是大虾但还是看了下,gotbaha1()里面应该是a2=a-a1才对,不然搜索时会出错,比如前面做的700后面搜700会把6,8,10...这些数打出来,而前面做6后面搜700则不会。
1