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; }