题目意思就是从2开始一次把其倍数的号码给踢掉,并且踢掉一次后对号码重新按1,2,3依次排序然后再次踢人
然后问你最后不被踢掉数的序列,第n个是几
刚开始我题目理解错了,以为是序列一直不边,就直接用筛法求出素数,然后压入一个数组,结果wa,后来才知道是踢掉后重拍了
既然重拍就设计一个标记数组,用来标记是否被踢掉
1 #include <stdio.h>
2 #define N 35000
3 int main(){
4 int arr[N]={0};
5 int lucky[N];
6 int i,j,k,n;
7 n = 0;
8 for (i=2;i<N;i++)
9 {
10 if(0 == arr[i]){
11 lucky[n++] = i;
12 //for(int j=i;j<N;j+=i)arr[j]=1;//筛法求素数
13 k = i+1;
14 j = 0;
15 while(k<N){
16 if(arr[k]==0){
17 j++;
18 }
19 if(i==j){
20 j = 0;
21 arr[k] = 1;
22 }
23 k++;
24 }
25 }
26 }
27 while (scanf("%d",&n)!=EOF&&n!=0)
28 {
29 printf("%d\n",lucky[n-1]);
30 }
31 return 0;
32 }