#include<stdio.h> #include<string.h> #include<vector> #include<algorithm> using namespace std; const int N=1010; bool visit[N]; vector<int>prime; int init_prim() { memset(visit,true,sizeof(visit)); int num=0; prime.push_back(1); for(int i=2; i<=N; i++) { if(visit[i]==true) { num++; prime.push_back(i);//从下标1开始存数 } for(int j=1; (j<=num)&&(i*prime[j]<=N); j++) { visit[i*prime[j]]=false; if(i%prime[j]==0)break; } } return 0; } int main() { int js,n,c,m; init_prim(); while(scanf("%d %d",&n,&c)!=EOF) { js=0; for(int i=0;i<prime.size();i++) { if(prime[i]<=n)js++; else break; } //printf("%d\n\n",js); printf("%d %d:",n,c); //if(js<=) if(js&1) { if(js<=2*c-1) { for(int i=0;i<js;i++) printf(" %d",prime[i]); } else { js/=2; for(int i=js-c+1;i<js+c;i++) printf(" %d",prime[i]); } } else { if(js<=2*c) { for(int i=0;i<js;i++) printf(" %d",prime[i]); } else { js/=2; for(int i=js-c;i<js+c;i++) printf(" %d",prime[i]); } } printf("\n\n"); } return 0; }
难点是格式的输出:
注意此题中1也是素数;