Sunday, February 27, 2011

406 - Prime Cuts


#include<iostream>
#include<stdlib.h>
using namespace std;
#define M 1001
bool prime[M];
long int prm[400];
int genprime();
int main()
{
    long int n,c,i,pc;
    int s,e;
    genprime();
    while(scanf("%ld%ld",&n,&c)==2)
    {
        pc=0;
        for(i=1;i<=n;i++)
            if(prime[i])prm[++pc]=i;
        if(pc&1)
            if(2*c-1<pc)
            {
                s=(pc-2*c+1)/2+1;
                e=s+2*c-1;
            }
            else
            {
                s=1;
                e=pc+1;
            }
        else
            if(2*c<pc)
            {
                s=(pc-2*c)/2+1;
                e=s+2*c;
            }
            else
            {
                s=1;
                e=pc+1;
            }
        cout<<n<<" "<<c<<":";
        for(i=s;i<e;i++)
            cout<<" "<<prm[i];
        cout<<endl<<endl;
    }
    exit(0);
}
int genprime()
{
    long i,j;
    for(i=1;i<M;i++)
        prime[i]=true;
    for(i=2;i<M;i++)
    {
        if(prime[i])
            for(j=2*i;j<M;j+=i)
                prime[j]=false;
    }
    return 0;
}

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.