1. 程式人生 > >韓小俠的專欄 已遷移至lssea.com

韓小俠的專欄 已遷移至lssea.com

題意讓求一段素數中間的幾個素數 用素數篩法篩出範圍內的素數然後確定一下就行了 注意題目中1也算作素數了 具體看程式碼

#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define max 2000
bool isprime[max];
int prime[max],nprime;
void getprime()
{
    memset(isprime,1,sizeof(isprime));
    isprime[1]=0;
    long long i,j;
    nprime=1;
    prime[1]=1;
    for(i=2; i<max; i++)
    {
        if(isprime[i])
            prime[++nprime]=i;
        for(j=i*i; j<max; j+=i)
            isprime[j]=0;
    }
}
int main()
{
    getprime();
    int n,c,f=0;
    while(cin>>n>>c)
    {
        int s;
        if(f)
            cout<<endl;
        f=1;
        for(s=1; prime[s]<=n; s++);
        s--;
        cout<<n<<" "<<c<<": ";
        if(2*c>=s)
            for(int i=1; i<=s; i++)
                if(i!=s)
                    cout<<prime[i]<<" ";
                else
                    cout<<prime[i]<<endl;
        else if(s%2)
            for(int i=s/2+1,j=-c+1; j<=c-1; j++)
                if(j!=c-1)
                    cout<<prime[i+j]<<" ";
                else
                    cout<<prime[i+j]<<endl;
        else if(s%2==0)
            for(int i=s/2,j=-c+1; j<=c; j++)
                if(j!=c)
                    cout<<prime[i+j]<<" ";
                else
                    cout<<prime[i+j]<<endl;
    }
    return 0;
}