题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=5317
感觉好神奇呀,一堆数在一起可以找到规律,学长讲完后,觉得自己是如此的so young
f[x]不超过7的
代码:
1 #include<algorithm> 2 #include<stdio.h> 3 #include<stack> 4 #include<string.h> 5 using namespace std; 6 7 #define lson r<<1 8 #define rson r<<1|1 9 10 const int maxn = 1e6+1; 11 int p[maxn], f[maxn][8]; 12 13 void Prime() 14 { 15 int i, j; 16 17 for(i=2; i<maxn; i++) 18 { 19 if(p[i] == 0) 20 { 21 for(j=i; j<maxn; j+=i) 22 p[j]++; 23 } 24 } 25 26 for(i=2; i<maxn; i++) 27 { 28 f[i][p[i]] = 1; 29 for(j=1; j<8; j++) 30 { 31 f[i][j] += f[i-1][j]; 32 } 33 } 34 } 35 36 37 int main() 38 { 39 int T; 40 41 Prime(); 42 43 scanf("%d", &T); 44 45 while(T--) 46 { 47 int u, v; 48 49 scanf("%d%d", &u, &v); 50 51 if(f[v][7] - f[u-1][7] >= 2) 52 printf("7\n"); 53 else if(f[v][6] - f[u-1][6] >= 2) 54 printf("6\n"); 55 else if(f[v][5] - f[u-1][5] >= 2) 56 printf("5\n"); 57 else if(f[v][4] - f[u-1][4] >= 2) 58 printf("4\n"); 59 else if( (f[v][3] - f[u-1][3] >= 2) || (f[v][6]-f[u-1][6]>=1 && f[v][3]-f[u-1][3]>=1) ) 60 printf("3\n"); 61 else if( (f[v][2] - f[u-1][2] >= 2) || (f[v][6]-f[u-1][6]>=1 && f[v][2]-f[u-1][2]>=1) ) 62 printf("2\n"); 63 else 64 printf("1\n"); 65 } 66 67 return 0; 68 }
勿忘初心