题目

源地址:

http://poj.org/problem?id=3518

理解

虽然看起来并没有二分计算的代码,但是应用了二分的思想。设两个端点,分别向两个方向扩展,最后的结果就是两个端点的差值。

代码

#include  <iostream>
#include  <cmath>

using namespace std;

bool isPrime(int n)
{
    for(int i=2;i<=sqrt((double)n);i++)
    {
        if(n%i==0)  return false;
    }
    return true;
}

int main()
{
    int n;
    while(cin>>n&&n!=0)
    {
        if(isPrime(n))
        {
            cout<<0<<endl;
        }
        else
        {
            int x=n-1;
            int y=n+1;
            while(!isPrime(x))  x--;
            while(!isPrime(y))  y++;

            cout<<y-x<<endl;
        }
    }
    return 0;
}

更新日志

  • 2014年07月23日 已AC。