poj2689 Prime Distance

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
__int64 poww(__int64 a,__int64 b);
__int64 l,u;
__int64 np;
#define MAX 70000
__int64 p[MAX];
bool isprime[MAX];
void init()
{
    np=0;
    __int64 i,j;
    for(i=2;i<MAX;i++)
    {
        if(isprime[i])
        {
            p[np++]=i;
        }
        for(j=0;j<np&&i*p[j]<MAX;j++)
        {
            isprime[i*p[j]]=false;
            if(i%p[j]==0)
            {
                break;
            }
        }
    }
}
#define hh 1000008
bool tag[hh];
__int64 res[hh];
__int64 cha[hh];
int main()
{
    memset(isprime,true,sizeof(isprime));
    memset(p,-1,sizeof(p));
    init();
    __int64 a,b;
    __int64 i,j;
    while(scanf("%I64d %I64d",&a,&b)!=EOF)//a对应0,b对应b-a
    {
        for(i=0;i<=b-a;i++)
        {
            tag[i]=true;
        }
        for(i=0;i<np&&p[i]*p[i]<=b;i++)
        {
            __int64 temp=a/p[i];
            if(temp*p[i]!=a)
            {
                temp++;
            }
            if(temp==1)
            {
                temp++;
            }
            for(j=temp*p[i];j<=b;j+=p[i])
            {
                tag[j-a]=false;
            }
        }
        int nima=0;
        if(a==1)
        {
            tag[0]=false;
        }
        for(i=0;i<=b-a;i++)
        {
            if(tag[i])
            {
                res[nima++]=i+a;
            }
        }
        for(i=0;i<nima-1;i++)
        {
            cha[i]=res[i+1]-res[i];
        }
        __int64 maxi,mini;
        maxi=-1;
        mini=-1;
        for(i=0;i<nima-1;i++)
        {
            if(mini==-1||cha[i]<cha[mini])
            {
                mini=i;
            }
            if(maxi==-1||cha[i]>cha[maxi])
            {
                maxi=i;
            }
        }
        if(mini==-1&&maxi==-1)
        {
            printf("There are no adjacent primes.\n");
        }
        else
        {
            printf("%I64d,%I64d are closest, %I64d,%I64d are most distant.\n",res[mini],res[mini+1],res[maxi],res[maxi+1]);
        }
    }
    return 0;
}

posted @ 2012-07-12 08:53  willzhang  阅读(178)  评论(0编辑  收藏  举报