标签:
先来一次线性素数筛,把1到10000000的素数都筛选出来,然后暴力跑一遍所有可能的值,打个表,查询的时候o(1)效率出解。
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<queue> #include<cstring> using namespace std; const long N = 10000000; long long prime[N] = {0},num_prime = 0; int isNotPrime[N] = {1, 1}; int R[10000000+10]; int ans[10000000+10]; int main() { memset(R,0,sizeof(R)); memset(ans,0,sizeof(ans)); for(long i = 2 ; i < N ; i ++) { if(! isNotPrime[i]) prime[num_prime ++]=i; //关键处1 for(long j = 0 ; j < num_prime && i * prime[j] < N ; j ++) { isNotPrime[i * prime[j]] = 1; if( !(i % prime[j] ) ) //关键处2 break; } } for(int i=0;i<num_prime;i++) { for(int j=i+1;j<num_prime;j++) { if(prime[i]*prime[j]>10000000) break; R[prime[i]*prime[j]]=1; } } ans[0]=0; for(int i=1;i<=10000000;i++) { if(R[i]==1) ans[i]=ans[i-1]+1; else ans[i]=ans[i-1]; } int LL,RR; while(~scanf("%d%d",&LL,&RR)) { printf("%d\n",ans[RR]-ans[LL-1]); } return 0; }
NEU OJ 1649 GMZ’s Pretty Number
标签:
原文地址:http://www.cnblogs.com/zufezzt/p/4725348.html