Description
给定区间[L, R](L <= R <= 2147483647,R-L <= 1000000),请计算区间中素数的个数。
Input
两个数L和R
Output
一行,区间中素数的个数
Sample Input
2 11
Sample Output
5
HINT
详见试题
题解
筛出2-sqrt(r)中的素数,然后用这些数筛l-r中的素数
pri存2-sqrt(r)中的素数
dpri 存r-l中的素数(向左平移l个)
#include<iostream> #include<cstring> #include<cmath> using namespace std; bool pri[50000000]; bool dpri[1000010]; long long l,r,q,cnt,ans,q2; int main() { memset(pri,true,sizeof(pri)); memset(dpri,true,sizeof(dpri)); cin>>l>>r; pri[1]=false; for (int i=2;i<=ceil(sqrt(r));i++){ if (pri[i]){ q=i; while (q<ceil(sqrt(r))){ q+=i; pri[q]=false; } for (q2=l;q2%i&&q2<r;q2++); while (q2<=i)q2+=i; while(q2<=r){ dpri[q2-l]=false; q2+=i; } } } for (int i=l;i<=r;i++) if (dpri[i-l]) ans++; cout<<ans; }
时间: 2024-10-16 03:21:17