搜索
查看: 1094|回复: 2
打印 上一主题 下一主题

挑战8

[复制链接]
跳转到指定楼层
楼主
发表于 2013-11-4 16:07:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
依然是质数表……
用2, 3, 5, 7, 11, 13去筛
然后把101-200之间的质数拷贝出来
从第二项开始扫描一遍,如果前面一项 - 后面一项 == 2,那么就找到了一对孪生质数
  1. #include <stdio.h>

  2. int main()
  3. {
  4.   int i, j;
  5.   int sum = 0;
  6.   char buf[201] = {0};
  7.   int div[] = {2, 3, 5, 7, 11, 13};
  8.   /* 17 * 17 > 200 */
  9.   int prime_table[50];
  10.   int pos = 0;
  11.   
  12.   for(i=0; i!=6; ++i)
  13.     for(j=div[i]; j<201; j+=div[i])
  14.       buf[j] = 1;
  15.   for(i=101; i<201; i+=2)
  16.     if(buf[i] == 0)
  17.       prime_table[pos++] = i;
  18.   for(i=1; i!=pos; ++i)
  19.     if(prime_table[i] - prime_table[i-1] == 2)
  20.       sum += 1;
  21.   printf("%d\n", sum);
  22.   return 0;
  23. }
复制代码
沙发
发表于 2016-4-28 19:55:00 | 只看该作者
看不太懂你的代码,能给点注释么?求素数不是一般都是用除到某数的平方根为止,没有除尽就算素数?
板凳
发表于 2016-6-21 00:37:08 | 只看该作者
isania936 发表于 2016-4-28 19:55
看不太懂你的代码,能给点注释么?求素数不是一般都是用除到某数的平方根为止,没有除尽就算素数?

就像淘金沙一样,先用筛子把其他容易筛选出来的杂质筛出来,再去找金沙的话速度就会快很多
这个筛子筛的得很干净,所以不用再另外去做其他步骤。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表