且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

POJ 1595 素数筛法

更新时间:2022-08-13 16:44:52

题意让求一段素数中间的几个素数 用素数筛法筛出范围内的素数然后确定一下就行了 注意题目中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;
}