区间素数筛模版
区间素数筛模版
筛出区间[a,b]的素数。(b-a<=10000,1<=a<=b<=2^31)
存在P中,素数个数即为P的size()。
ll a,b; bool isprime[maxn]; vector<ll> prime; bool isP[maxn]; vector<ll> P; void play_prime() { memset(isprime,1,sizeof(isprime)); isprime[1]=0; for(int i=2;i<maxn;i++){ if(!isprime[i]) continue; for(int j=i*2;j<maxn;j+=i){ isprime[j]=0; } } for(int i=1;i<maxn;i++){ if(isprime[i]) prime.push_back(i); } } void get_prime(ll a,ll b) { if(a<=1) a=2; memset(isP,1,sizeof(isP)); for(int i=0;i<prime.size(),prime[i]*prime[i]<=b;i++){ ll p=prime[i]; for(ll j=a+(p-a%p)%p;j<=b;j+=p){ if(j!=p) isP[j-a]=0; } } P.clear(); for(ll i=a;i<=b;i++){ if(isP[i-a]) P.push_back(i); } }
没有AC不了的题,只有不努力的ACMER!