这题,一开始以为是第几个素数,后来打表之后查了一下,发现不是。
再看看题目,才知道是简单的筛选法。
每一个筛选留下来的数n,n往后的所以数,能被n整除的除去,不能的留下,筛选出3000个数出来就OK了。
下面的是AC的代码:
#include <iostream> #include <cstring> using namespace std; int num[50000]; int a[3005]; int main() { memset(num, 0, sizeof(num)); int c = 0, k; for(int i = 2; i < 50000; i++) { if(!num[i]) { a[c++] = i; k = 0; for(int j = i + 1; j < 50000; j++) { if(!num[j]) { k++; if(k == i) { num[j] = 1; k = 0; } } } if(c >= 3000) break; } } int n; while(cin >> n, n) cout << a[n - 1] << endl; return 0; }
杭电ACM1216——Assistance Required~~筛选法的应用
原文地址:http://blog.csdn.net/qq_25425023/article/details/46525193