标签:acm-icpc algorithm prime dp
2 2 3 3 5
1 1
#include <iostream> #include <cstdio> #include <cmath> #include <string> #include <cstring> #include <algorithm> #include <queue> #include <map> #include <set> #include <stack> #include <vector> #include <sstream> #define PI acos(-1.0) #define eps 1e-8 #define f 1000010 const int inf = (1<<30) - 10; using namespace std; int s[f], p; int num[f]; int dp[f][8]; void get_prime() { int i,j,n,m,s1,s2,a,b; s[1]=2; s[2]=3; m=2; for(i=6;i<f;i=i+6) { a=i-1; b=i+1; s1=1; s2=1; n=(int)sqrt(m); for(j=1;j<=n+1;j++) if(a%s[j]==0){s1=0;break;} for(j=1;j<=n+1;j++) if(b%s[j]==0){s2=0;break;} if(s1!=0){m++;s[m]=a;} if(s2!=0){m++;s[m]=b;} } p = m; } void init(){ memset(num,0,sizeof(num)); memset(dp,0,sizeof(dp)); for(int i = 1;i <= p; ++i){ for(int j = 1;j*s[i] <= 1000000; ++j){ num[j*s[i]]++; } } for(int i = 2;i <= 1000000; ++i){ for(int j = 1;j <= 7; ++j){ dp[i][j] = dp[i-1][j]; } dp[i][num[i]]++; } } int main(){ //freopen("input.txt","r",stdin); get_prime(); init(); int T; cin>>T; int l, r; while(T--){ scanf("%d %d",&l,&r); int knum[8]; for(int i = 1;i <= 7; ++i){ knum[i] = dp[r][i] - dp[l-1][i]; } if(knum[7] >= 2){ printf("7\n"); }else if(knum[6]>=2){ printf("6\n"); }else if(knum[5]>=2){ printf("5\n"); }else if(knum[4]>=2){ printf("4\n"); }else if(knum[3]>=2){ printf("3\n"); }else if(knum[6] && knum[3]){ printf("3\n"); }else if(knum[2]>=2){ printf("2\n"); }else if(knum[6] && knum[2]){ printf("2\n"); }else if(knum[4] && knum[2]){ printf("2\n"); }else{ printf("1\n"); } } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:acm-icpc algorithm prime dp
原文地址:http://blog.csdn.net/u012844301/article/details/47132095