題目沒什麼,1A過,關鍵要把弄懂題意,英文差的孩子是傷不起額...
題意:給定你一個數n,讓你求出1-n內有多少個素數,再給你一個數d,如果2*d大於素數的個數則全部輸出;
否則,如果個數為單數,輸出2*d - 1個並且以中間那個素數為中心分別向兩邊輸出d-1個;
如果偶數個,輸出2*d個,也是以中間那個素數為中心向兩邊擴充;
#include<iostream>
#include<cstdio>
using namespace std;
#define manx 10000
bool s[manx];
int num,p[manx],x[manx]; /// x[i] 是用來記錄當前1 ~ i包括1在內的質數的個數,可以列印看看..
void prime(){
memset(s,0,sizeof(s));
memset(x,0,sizeof(x));
for(int i=2;i*i<=manx;i++){
if(!s[i]){
for(int j=2;j*i<manx;j++){
s[i*j]=1;
}
}
}
p[0]=1; num=1; x[1]=1;
for(int i=2;i<manx;i++){
if(!s[i]){
p[num++]=i;
x[i]=x[i-1]+1;
continue;
}
x[i]=x[i-1];
}
}
int main(){
int n,c;
prime();
while(cin>>n>>c){
int d=c*2;
printf("%d %d:",n,c);
if(d>=x[n]){
for(int i=0;i<x[n];i++)
printf(" %d",p[i]);
}
else {
if(x[n]%2==0){
for(int i=(x[n]-d)/2;i<x[n]-(x[n]-d)/2;i++)
printf(" %d",p[i]);
}
else{
for(int i=(x[n]-d+1)/2; i<x[n]-(x[n]-d+1)/2 ;i++){
printf(" %d",p[i]);
}
}
}
printf("\n\n");
}
}