首页 > 其他 > 详细

poj 3518 Prime Gap 二分查找下界和素数筛法

时间:2014-12-04 18:05:12      阅读:190      评论:0      收藏:0      [点我收藏+]

/*
题意:输入有多组数据,每组数据一个n,如果n是素数,输出0否则输出离n最近的两个素数的积,第100000个素数是1299709,所有的素数都在这个范围内
思路:素数筛法加二分查找下界
*/

#include<stdio.h>

int a[1299720],pri[100005];
int Serch(int v)//二分查找下界
{
    int mid,x=0,y=100001;
    while(x<y)
    {
        mid=(y+x)/2;
        if(pri[mid]>=v)
            y=mid;
        else
            x=mid+1;
    }
    //printf("pri[x]=%d\n",x);
    if(pri[x]==v)
        return 0;
    else
        return pri[x]-pri[x-1];
}
int main()
{
    int i,j,k=0,n;
    for(i=2; i<=1299709; i++)//筛法
        if(!a[i])
        {
            pri[k++]=i;
            for(j=i*2; j<=1299709; j+=i)
                a[j]=1;
        }
    while(~scanf("%d",&n),n)
    {
        printf("%d\n",Serch(n));


    }
    return 0;
}

poj 3518 Prime Gap 二分查找下界和素数筛法

原文:http://blog.csdn.net/u013491149/article/details/41725759

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!