啊哈磊_编程从这里起步

标题: 挑战28:验证歌德巴赫猜想,我的酷睿i7狂奔一小时。。。。。。 [打印本页]

作者: 福华    时间: 2015-6-21 21:43
标题: 挑战28:验证歌德巴赫猜想,我的酷睿i7狂奔一小时。。。。。。
我的想法很简单,也很直接,把一个数拆成两个,如果两个数都是质数,那就成立。
完整代码如下:
#include <stdio.h>
#include <stdlib.h>
int prime(int n)      /*定义函数prime,用于判断质数*/
{
    int i,f=1;
    for (i=2;i<n;i++)
    {
            if(n%i==0)
             {
             f=0;
             break;
             }
    }
    if(f==0)          return 0;
    else                return 1;   
}
int main()
{
printf("用于把一个数拆分成两个质数之和\n");
while(1)
    {
  int n,a,b,amount=0;
  scanf("%d",&n);
  for(a=2;a<=n/2;a++)
  {
  b=n-a;
   if(prime(a)&&prime(b))
   {
   printf("%d=%d+%d\n",n,a,b);
   amount++;
   }
  }   
  printf("总数=%d\n",amount);
  printf("\n");
    }
system("pause");
return 0;
}
CPU是酷睿i7,风扇轰鸣一小时多,结果倒是对的。
是我的算法要改进,还是这题本来就这么坑爹?
同学们有什么好方法啊?


作者: Dsp    时间: 2015-6-25 09:07
先弄一个数组放质数
然后用题目中的数减去一个质数
再判断差是不是质数
(直接扫一下数组里的质数)

作者: 福华    时间: 2015-6-25 10:01
这样做似乎快一点
遇到性能瓶颈了

作者: zhuzhu81998    时间: 2015-6-25 20:03
检测质数那儿就慢了点吧?看看rosynirvana的吧!http://www.ahalei.com/forum.php? ... amp;_dsign=91ad725e
作者: 福华    时间: 2015-6-25 22:38
脑洞大开,长见识
作者: 福华    时间: 2015-6-27 20:14
对算法做了优化,改进后的完整代码如下:
[mw_shl_code=c,true]#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int prime(int n)
{
        int i,f=1;
    if(n%2==0||n==1)        return 0;
    else
    {
                for(i=3;i<=sqrt(n);i+=2)
        {
                        if(n%i==0)        {f=0;break;}
        }
        if(f==1) return 1;
        if(f==0) return 0;
    }
   
}
int main()
{
        printf("用于把一个数拆分成两个质数之和\n");
        while(1)
    {
                int n,a,b,amount=0;
                scanf("%d",&n);
                for(a=2;a<=n/2;a++)
                {
               
                        if(prime(a))
                        {
                                b=n-a;
                if(prime(b))
                                {
                printf("%d=%d+%d\n",n,a,b);
                                amount++;
                }
                        }
                }   
                printf("总数=%d\n",amount);
                printf("\n");
    }
        system("pause");
        return 0;
}
[/mw_shl_code]
作者: 福华    时间: 2015-6-27 20:15
不到一分钟计算完成{:soso_e192:}
作者: 福华    时间: 2015-6-27 20:17
之前就是慢在判断质数部分




欢迎光临 啊哈磊_编程从这里起步 (https://bbs.codeaha.com/) Powered by Discuz! X3.2