| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 312 人关注过本帖
标题:一道关于哥德巴赫的程序,请高手指导
只看楼主 加入收藏
dxp44444
Rank: 1
等 级:新手上路
帖 子:8
专家分:4
注 册:2011-8-23
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:3 
一道关于哥德巴赫的程序,请高手指导
程序代码:
#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 编辑 ]
搜索更多相关主题的帖子: 哥德巴赫 
2011-08-26 15:12
dxp44444
Rank: 1
等 级:新手上路
帖 子:8
专家分:4
注 册:2011-8-23
收藏
得分:0 
呀,原来只能输入偶数,对不起,呵呵

[ 本帖最后由 dxp44444 于 2011-8-26 15:26 编辑 ]
2011-08-26 15:24
dxp44444
Rank: 1
等 级:新手上路
帖 子:8
专家分:4
注 册:2011-8-23
收藏
得分:0 
程序代码:
#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;
}
重新修改了下,还请各位大大指教!谢谢
2011-08-26 15:48
stophin
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:227
专家分:618
注 册:2010-3-26
收藏
得分:7 
我虽然不是大虾但还是看了下,gotbaha1()里面应该是a2=a-a1才对,不然搜索时会出错,比如前面做的700后面搜700会把6,8,10...这些数打出来,而前面做6后面搜700则不会。
2011-08-28 11:48
快速回复:一道关于哥德巴赫的程序,请高手指导
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018491 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved