原理,先删除2的倍数的所有数,然后删除3的倍数的所有的数,这里有个问题(在删除3倍数的数时,指的是删除和3间隔为3的数),然后删除和5间隔为5的数......
例如:2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
删除2的倍数 3 5 7 9 11 13 15 17 19
删除3的间隔 5 7 11 13 17 19
为什么有这个规律呀?不懂
#include <iostream>
#include <algorithm>
#include <map>
#include <string>
#include <list>
#include <iterator>
using namespace std;
//原理,先删除2的倍数的所有数,然后删除3的倍数的所有的数,这里有个问题(在删除3倍数的数时,指的是删除和3间隔3的数)
//例如:2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
//删除2的倍数 3 5 7 9 11 13 15 17 19
//删除3的间隔 5 7 11 13 17 19
//为什么有这个规律呀?不懂
int main() {
list<int> l;
list<int>::iterator it;
int lucky[3001];
for( int i=2; i < 50;i++){ //赋值2-35000
l.push_back(i);
}
for(int i=0;i<10;i++){ //构造3000个 存在lucky数组中
lucky[i]=l.front();
int key =lucky[i];
it = l.begin();
while (it!=l.end()){
it= l.erase(it); //移走,指针后移以为
int k=key -1;
while (k--){
if(it == l.end()) {
break;
}
it++;
}
}
}
int n;
while (cin >> n,n){
cout << lucky[n-1] << endl;
}
return 0;
}