区间筛——模板
在遇到数字很大但区间不大时,可以选用区间筛。
范围是【L, R】,不会把0, 1筛进去。
void getPrime(ll L, ll R) { for(int i = 0; (ll)i * i <= R; i++) prime_base[i] = 1; for(int i = 0; i <= R - L; i++) prime[i] = 1; if(L < 2) L = 2; for(int i = 2; (ll) i * i <= R; i++) { if(prime_base[i]) { for(ll j = 2 * i; (ll) j * j <= R; j += i) prime_base[j] = 0; for(ll j = max(2LL, (L + i - 1) / i) * i; j <= R; j += i) prime[j - L] = 0; } } for(ll i = 0; i <= R - L; i++) { if(prime[i]) prime[cnt++] = i + L; } }