406 - Prime Cuts

#include<stdio.h>
#include<string.h>
#include<math.h>
using namespace std;
bool arr[5000];
long long int N=1005;
void sieve()
{
    long long int i,j,k;
    k=sqrt(N);
    for(i=3;i<=k;i+=2)
    {
        if(arr[i]==0)
        {
            for(j=i*i;j<N;j+=i+i)
            {
                arr[j]=1;
            }
        }
    }
    for(i=4;i<N;i=i+2)
    {
        arr[i]=1;
    }
}

int main()
{
    sieve();
    long long int i,j,k,a,b,c,cnt,arr1[1000];
    while(scanf("%lld%lld",&a,&b)==2)
    {
        cnt=0;
        k=1;
        for(i=1;i<=a;i++)
        {
            if(arr[i]==0)
            {
                cnt++;
                arr1[k++]=i;
            }
        }
        if(cnt%2==0 && cnt>(2*b))
        {
            printf("%lld %lld: ",a,b);
            c=2*b;
            cnt=cnt-c;
            cnt=cnt/2;
            for(j=cnt+1;;j++)
            {
                printf("%lld",arr1[j]);
                if(j!=cnt+c)
                {
                    printf(" ");
                }
                if(j==cnt+c)
                {
                    break;
                }
            }
            printf("\n\n");
        }
        else if(cnt%2==1 && cnt>(2*b))
        {
            printf("%lld %lld: ",a,b);
            c=(2*b)-1;
            cnt=cnt-c;
            cnt=cnt/2;
            for(j=cnt+1;;j++)
            {
                printf("%lld",arr1[j]);
                if(j!=cnt+c)
                {
                    printf(" ");
                }
                if(j==cnt+c)
                {
                    break;
                }
            }
            printf("\n\n");
        }
        else if(cnt%2==1 && cnt<=(2*b))
        {
            printf("%lld %lld: ",a,b);
            for(j=1;j<k;j++)
            {
                printf("%lld",arr1[j]);
                if(j!=cnt)
                {
                    printf(" ");
                }
            }
            printf("\n\n");
        }
        else if(cnt%2==0 && cnt<=(2*b))
        {
            printf("%lld %lld: ",a,b);
            for(j=1;j<k;j++)
            {
                printf("%lld",arr1[j]);
                if(j!=cnt)
                {
                    printf(" ");
                }
            }
            printf("\n\n");
        }
        memset(arr1,0,sizeof(arr1));
    }
    return 0;
}

0 comments: (+add yours?)