题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1216

思路:色筛法

代码(1):

 1 #include<iostream>//--------1216 HDU   埃拉托色尼筛选法
 2 #include<stdio.h>
 3 #include<stdlib.h>
 4 #include<algorithm>
 5 #include<math.h>
 6 #include<string.h>
 7 #include<vector>
 8 using namespace std;
 9 #define Max 40000
10 bool b[Max];
11 __int64 a[Max], c;
12 void fun()
13 {
14     __int64 i, j, count;
15     c = 0;
16     memset(b, true, sizeof(b));
17     b[1] = 0;
18     for (i = 2; i < Max; ++i)
19     {
20         if (b[i])
21         {
22             a[++c] = i;
23             count = i;
24             for (j = i+1; j < Max; ++j)
25             {
26                 if (b[j] == true)
27                     count--;
28                 if (count == 0)
29                 {
30                     b[j] = false;
31                     count = i;
32                 }
33             }
34         }
35     }
36 }
37 int main()
38 {
39     fun();
40     int n;
41     while (scanf("%d", &n) != EOF)
42     {
43         if (n == 0)
44             break;
45         else
46             printf("%d\n", a[n]);
47     }
48     return 0;
49 }
View Code

相关文章: