poj 3518
二分水题。
代码:
#include<iostream>
#include<fstream>
using namespace std;
int a[100001];
int b[1299710];
int n;
void read(){
// ifstream cin("in.txt");
int i,j,k,mid;
k=1;
a[k++]=2;
for(i=3;i<=1299709;i+=2)
if(b[i]==0)
{
a[k++]=i;
for(j=i*2;j<=1299709;j+=i)
b[j]=1;
}
while(cin>>n){
if(n==0) return;
if(b[n]==0){
cout<<0<<endl;
continue;
}
i=1;j=100000;
while(i<=j)
{
mid=(i+j)>>1;
if(a[mid]<n) i=mid+1;
else j=mid-1;
}
cout<<a[i]-a[j]<<endl;
}
}
int main(){
read();
return 0;
}
浙公网安备 33010602011771号