码迷,mamicode.com
首页 > 其他好文 > 详细

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

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

标签:io   sp   for   数据   bs   amp   nbsp   br   ca   

/*
题意:输入有多组数据,每组数据一个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 二分查找下界和素数筛法

标签:io   sp   for   数据   bs   amp   nbsp   br   ca   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!