UVA 10539 Almost Prime Numbers
https://vjudge.net/problem/UVA-10539
统计区间内有多少数本身不是素数,但只有一个素因子
如果不预处理:600*8000*(log(2,1e12)+log3(2,1e12))……==TLE
预处理:8000*(log(2,1e12)+log3(2,1e12))…… + 600*40 ==AC
#include<cstdio> #include<iostream> #include<algorithm> #define M 1100501 using namespace std; int cnt,p[M],sum; bool v[M]; long long ans[M]; void read(long long &x) { x=0; char c=getchar(); while(!isdigit(c)) c=getchar(); while(isdigit(c)) { x=x*10+c-'0'; c=getchar(); } } int main() { for(int i=2;i<M;i++) { if(!v[i]) { v[i]=true; p[++cnt]=i; } for(int j=1;j<=cnt;j++) { if(i*p[j]>=M) break; v[i*p[j]]=true; if(i%p[j]==0) break; } } for(int i=1;i<=cnt;i++) for(long long j=1ll*p[i]*p[i];j<=1e12;j*=p[i]) ans[++sum]=j; sort(ans+1,ans+sum+1); int T,tot,t1,t2; long long l,r; scanf("%d",&T); while(T--) { read(l); read(r); t1=upper_bound(ans+1,ans+sum+1,r)-ans-1; t2=upper_bound(ans+1,ans+sum+1,l)-ans-1; if(ans[t2]==l) t2--; printf("%d\n",t1-t2); } }