埃筛的作用是找素数(质数),以质数的倍数一定是合数为重心思路。
比如说 2 是质数,但 2 的倍数(除了自己)都是合数。
3 是质数,但 3 的倍数(除了自己)都是合数。
我们针对这个特性,可以用打标法实现。p[x]表示x是否为质数。
void Prime() { memset(P, true, sizeof (P)); for (int i = 2; i <= MAX; i++) { if (P[i]) { for (int k = i * 2; k <= MAX; k += i) { P[k] = false; } } } }
标签:标记,质数,C++,埃筛,第四行,倍数,写法,合数 From: https://blog.csdn.net/applelin2012/article/details/141499593第二行:起初大家都是质数,后面慢慢删除。
第四行:只要这个数是质数,他的倍数就都是合数(虽然合数的倍数也是合数,但是他已经被它们的公约数标记了)。
第六行:标记合数。