POJ 1595 素數切

來源:互聯網
上載者:User

題目沒什麼,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");
    }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.