题目链接: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 }