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

Posted kcn999

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板欧拉筛法(线性筛法)相关的知识,希望对你有一定的参考价值。

 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 }

 

以上是关于模板欧拉筛法(线性筛法)的主要内容,如果未能解决你的问题,请参考以下文章

数学基础素数线性筛法--欧拉筛法模板普通筛法的优化

[模板]线性筛素数(欧拉筛法)

线性筛法(欧拉筛法)求素数

欧拉筛法模板代码

欧拉筛法(线性筛法)与解积性函数

欧拉筛法(线性筛)素数