普通算法——埃氏筛

打印 上一主题 下一主题

主题 1737|帖子 1737|积分 5211

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
埃氏筛

用于更加速速的求素数
思路:


  • 创建一个划一大小的bool数组
  • 先判断i有没有被筛掉
  • 若没有,则以i基数依次筛掉含有该因数i的数,即st[j] = true;
  1. #include <iostream>
  2. #include <ctime>
  3. using namespace std;
  4. const int N = 1e7;
  5. bool st[N] = { false };
  6. int main()
  7. {
  8.         double e = clock();
  9.         int count = 0;
  10.         int pp = 0;
  11.         //埃氏筛法:50ms
  12.         for (int i = 2; i <= N / i; i++) {
  13.                 if (!st[i]) {
  14.                         for (int j = i * i; j < N; j += i) st[j] = true;
  15.                 }
  16.         }
  17.         for (int i = 2; i < N; i++)
  18.         if (!st[i]) count++;
  19.         //普通筛法:806ms
  20.         /*for (int i = 2; i < N; i++) {
  21.                 if (is_Prime(i)) count++;
  22.         }*/
  23.         //欧拉筛法:43ms
  24.         /*int primes[N];
  25.         for (int i = 2; i <= N; i++) {
  26.                 if (!st[i]) primes[pp++] = i, count++;
  27.                 for (int j = 0; i * primes[j] <= N; j++) {
  28.                         st[primes[j] * i] = true;
  29.                         if (i % primes[j] == 0) break;
  30.                 }
  31.         }*/
  32.         double s = clock();
  33.         cout << count << endl << s - e;
  34. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我爱普洱茶

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表