| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1619 人关注过本帖
标题:任何一个不小于6的偶数一定可以拆成两个质数的和。如6=3+3,8=5+3等,你的任 ...
只看楼主 加入收藏
光头强
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2015-10-1
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:13 
任何一个不小于6的偶数一定可以拆成两个质数的和。如6=3+3,8=5+3等,你的任务是将一个大于6的偶数n拆成两个最接近的质数p,q,满足p+q=n.
输入包含多组测试数据。每组数据包含1个偶数n(n在6到1000000之间包含边界)。

Output

对于每组测试数据,输出两个质数p,q(p<=q)满足p+q=n。

Sample Input


6
8
10
200000
Sample Output


3 3
3 5
5 5
99871 100129


————————————————————————————————————————————————————————————————————————
#include<stdio.h>

int main()
{
    int n,i;
    int p,q;

    while(1==scanf("%d",&n))
    {

        for(p=n/2; p>1; p--)
        {
            q=n-p;
            for(i=2; i<=sqrt(n); i++)
            {
                if(q%i!=0)
                    printf("%d %d\n",p=n-q,q);
                break;
            }

        }
    }

    return 0;
我打的这个程序在输入第三个数据时 会出来两种结果
答案应该只出来一种  求解决 !!!thank you !!!
搜索更多相关主题的帖子: include include 
2015-11-06 17:04
我爱吃青菜
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:190
专家分:500
注 册:2015-3-29
收藏
得分:0 
10=5+5
10=3+7
难道不应该有两个吗?
如果不想显示两个,省略掉就行了
2015-11-06 17:51
光头强
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2015-10-1
收藏
得分:0 
回复 2楼 我爱吃青菜
大哥  
结果应该只需要输入两个数最相近的
按照我的编译程序
只需要输出第一个结果就好
可是我 不知道该如何去掉剩下的结果
2015-11-06 18:03
我爱吃青菜
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:190
专家分:500
注 册:2015-3-29
收藏
得分:0 
回复 3楼 光头强
没仔细审题……4楼说的没错,但是i+=2 j-=2似乎不合理,如果相除后还是偶数就不对了

[此贴子已经被作者于2015-11-6 18:20编辑过]

2015-11-06 18:18
光头强
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2015-10-1
收藏
得分:0 
回复 4楼 边小白
大哥 ispri是什么?
是isprint吗?
我们还没学到啊!
2015-11-06 18:31
光头强
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2015-10-1
收藏
得分:0 
回复 5楼 我爱吃青菜
你们说的 我好像还没学
如果继续用我的程序  该怎么改
或者说我的 改也不行吗?
2015-11-06 18:34
我爱吃青菜
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:190
专家分:500
注 册:2015-3-29
收藏
得分:0 
首先你判断素数的方法没弄对,先自己写个能正确判断素数的程序
小白的ispri其实是个函数,自己编来判断一个数是不是素数的.
2015-11-06 19:05
光头强
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2015-10-1
收藏
得分:0 
回复 8楼 我爱吃青菜
可是这个是可以判断是不是素数的啊
for(i=2; i<=sqrt(n); i++)
            {
                if(q%i!=0)
                    printf("%d %d\n",p=n-q,q);
                break;
            
只要q%所有的【2,sqrt(n)】都不等于0 不就是素数吗???
2015-11-06 19:09
我爱吃青菜
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:190
专家分:500
注 册:2015-3-29
收藏
得分:0 
if完接着就break了,这个循环只进行了i=2的步骤就停止了,每次都是这样,所以你算出来的都是奇数,不是素数
2015-11-06 19:15
光头强
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2015-10-1
收藏
得分:0 
回复 10楼 我爱吃青菜
for(p=n/2; p>1; p--)
        {
            int flag=1;
            q=n-p;
            i=2;
            while(i<=sqrt(n))
            {
                if(q%i==0)
                {
                    flag=0;
                    break;
                }
                i++;
            }
            if(flag)
                printf("%d %d\n",p=n-q,q);

        }
那这个呢?
2015-11-06 19:30
快速回复:任何一个不小于6的偶数一定可以拆成两个质数的和。如6=3+3,8=5+3等,你 ...
数据加载中...
 
   



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

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