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

posted on 2011-03-29 15:45  宇宙吾心  阅读(190)  评论(0)    收藏  举报

导航