| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 943 人关注过本帖
标题:编程题4(适合新手练习)
只看楼主 加入收藏
bianfeng
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2007-11-28
结帖率:0
收藏
 问题点数:0 回复次数:6 
编程题4(适合新手练习)
编写一个程序,对于用户输入的正偶数n,将其分解成两个素数之和.
如:用户输入正整a,a=b+d,b和d是两个素数,
搜索更多相关主题的帖子: 练习 
2008-03-12 10:43
yxwsbobo
Rank: 5Rank: 5
等 级:职业侠客
帖 子:345
专家分:306
注 册:2007-10-29
收藏
得分:0 
输入数的范围小于1e7大于2的偶数

程序代码:
#include <stdio.h>
#include <math.h>
int sushu(int i)
{
        int k,temp;
        static int ou[10000000] ={0,0,1,1};      //记录某数是否为素数
        if(ou[i]!=0) return ou[i];
                if(i%3==0)                                //除2,3外的素数一定是6n-1,6n+1的形式
                return ou[i]=2;
                temp=i/3;
        for(k=1;6*k-1<=temp;++k,temp=i/(6*k-1))  //x1,x2有交叉时停止
                {
                        if(i%(6*k-1)==0) return ou[i]=2;
                        if(i%(6*k+1)==0) return ou[i]=2;
                }
                return ou[i]=1;
}
int main()
{
    int x,n,p;
    while(scanf("%d", &x)!=EOF)
    {
        if(x==4)
        {
            printf("4=2+2\n");
            continue;
        }
        if(sushu(x-3)==1)
        printf("%d=3+%d\n",x,x-3);
        n=x/2;
        for(p=1;6*p+1<=n;++p)
        {
            if(x%6==4||x%6==0)
            if(sushu(x-(6*p-1))==1&&sushu(6*p-1)==1)
            printf("%d=%d+%d\n",x,6*p-1,x-(6*p-1));
            if(x%6==2||x%6==0)
            if(sushu(x-(6*p+1))==1&&sushu(6*p+1)==1)
            printf("%d=%d+%d\n",x,6*p+1,x-(6*p+1));
        }
        if(6*p-1<=n)
        if(sushu(x-(6*p-1))==1&&sushu(6*p-1)==1)
        printf("%d=%d+%d\n",x,6*p-1,x-(6*p-1));
        }
        return 0;
}

How are you 怎么是你?
How old are you   怎么老是你?
2008-03-12 11:08
fangfangff
Rank: 1
等 级:新手上路
威 望:2
帖 子:479
专家分:0
注 册:2006-12-22
收藏
得分:0 
楼上的算法不错啊
但是是否可以用文件来保存输出的结果呢??

千里冰封---My Love 尽管相隔千里 , 依然拥有冰封
2008-03-12 14:39
mqh21364
Rank: 1
等 级:新手上路
帖 子:642
专家分:0
注 册:2008-2-28
收藏
得分:0 
除2,3外的素数一定是6n-1,6n+1的形式
不错。。。。。。
2008-03-12 15:56
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
依然效率低
2008-03-12 16:06
yxwsbobo
Rank: 5Rank: 5
等 级:职业侠客
帖 子:345
专家分:306
注 册:2007-10-29
收藏
得分:0 
......以前写的,原班贴上来了

当然不能跟燕大大比了

How are you 怎么是你?
How old are you   怎么老是你?
2008-03-12 18:40
hoodlum1980
Rank: 2
来 自:浙江大学
等 级:论坛游民
威 望:2
帖 子:289
专家分:23
注 册:2008-2-24
收藏
得分:0 
看的出来二楼的代码写的是比较认真的。题外话,关于求一个数是否是素数的问题,在算法上已经解决了。但是关于把一个数因数分解是一个算法上的难题。这两个非常对称的问题,一个是简单题,而另一个是复杂题。
2008-03-13 12:06
快速回复:编程题4(适合新手练习)
数据加载中...
 
   



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

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