题目链接:

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 }

 

posted on 2015-07-28 20:44  栀蓝  阅读(133)  评论(0编辑  收藏  举报

levels of contents