都是小白的我们,我把遇到的疑惑,你也遇到过,代码里都有注释,欧拉筛不说别的,至少比我们学的一个一个除的速度要快,所以在这里,和大家一起学习这个欧拉筛
其中几个我遇到的问题,都着重给了注释,一起加油吧
#include<cstdio>
#include<iostream>
using namespace std;
int a, b;
int p[80000100];
int prime[10000000];
int cnt = 1;
void check() {
for (int i = 2; i <= 36; i++) {
if (!p[i])
prime[cnt++] = i;
for (int j = 1; j <= cnt; j++) {
if (i * prime[j] > 36)//超出范围
break;
p[i * prime[j]] = 1;//在已存的素数表中,每个倍数都标记
if (i % prime[j] == 0)//防止二次筛选,比如12 可以被2 3 4 6 筛,所以第一次就筛出去
break; //比如说12 没筛出去,第二轮就把12*3给标记了,轮到后面18*2又标记了36,所以这步就是为了防止重复标记
}
}
}
int main() {
check();
return 0;
}