码迷,mamicode.com
首页 > 其他好文 > 详细

【模板】欧拉筛法(线性筛法)

时间:2018-11-25 14:31:50      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:euler   break   筛法   span   register   reg   void   pre   ++   

 1 int n;
 2 int p[MAX_N], cnt;
 3 bool b[MAX_N];
 4  
 5 void Euler()
 6 {
 7     b[0] = b[1] = 1;
 8     for(register int i = 2; i <= n; ++i)
 9     {
10         if(!b[i]) p[cnt++] = i;
11         for(register int j = 0; i * p[j] <= n; ++j)
12                 // 不需要判断j < cnt, 因为中途定然会break出去
13         {
14             b[i * p[j]] = 1;
15             if(!(i % p[j])) break;
16                 // 当出现这种情况时, i * p[j + k(k > 0, j + k < cnt)]的情况一定会被后面给筛掉
17         }
18     }
19     return;
20 }

 

【模板】欧拉筛法(线性筛法)

标签:euler   break   筛法   span   register   reg   void   pre   ++   

原文地址:https://www.cnblogs.com/kcn999/p/10015332.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!