题目大意:打印1——n间(这里1也算素数)的素数,正中间2c个素数如果[1,n]间素数数目为偶数,否则正中间2c-1个素数.
#include <iostream>
#include <vector>using namespace std;
const int maxn=1001;
bool prm[maxn];
int main()
{
memset(prm,true,sizeof(prm));
for(int i=3;i<=maxn;i+=2)
for(int j=3;j<=maxn/i;j+=2){
if(prm[i]){
prm[i*j]=false;
}
}
prm[0]=false;//此题1为素数
for(int i=4;i<=maxn;i+=2)prm[i]=false;
int n,c,cnt;
vector<int>v;
while(~scanf("%d%d",&n,&c)){
cnt=0;
int m=2*c-1;
v.clear();
for(int i=1;i<=n;i++){
if(prm[i]){
v.push_back(i);
cnt++;
}
}
printf("%d %d:",n,c);
if(m>=cnt){
printf(" 1");
for(int i=1;i<cnt;i++){
printf(" %d",v[i]);
}
printf("\n");
puts("");
continue;
}
int mid=cnt>>1;
if(cnt%2==0){
for(int i=mid-c;i<=mid+c-1;i++)
printf(" %d",v[i]);
printf("\n");
puts("");
continue;
}else{
for(int i=mid-c+1;i<=mid+c-1;i++)
printf(" %d",v[i]);
printf("\n");
puts("");
continue;
}
}
return 0;
}