埃筛C++写法
埃筛的作用是找素数(质数),以质数的倍数一定是合数为重心思路。
比如说 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;}}} }
第二行:起初大家都是质数,后面慢慢删除。
第四行:只要这个数是质数,他的倍数就都是合数(虽然合数的倍数也是合数,但是他已经被它们的公约数标记了)。
第六行:标记合数。