#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<b;i++)
#define per(i,a,b) for(int i=b-1;i>=a;i--)
const int maxn=1e7+10;
typedef long long ll;
bool pri[maxn];
int prime[maxn];
int cnt=0;
void init(){
rep(i,2,maxn){
if(!pri[i]){
prime[cnt++]=i;
for(ll j=1ll*i*i;j<maxn;j+=i){
pri[j]=1;
}
}
}
//printf("cnt:%d\n",cnt);
}
/*
注意这个写法,大于等于,小于等于
*/
//找到第一个小于等于n的位置
int getpos1(int n){
int l=0,r=cnt-1,mid,ans;
while(l<=r){
mid=(l+r)>>1;
if(prime[mid]>n)
r=mid-1;
else{
ans=mid;
l=mid+1;
}
}
return ans;
}
//找到第一个大于等于n的位置
int getpos2(int n){
int l=0,r=cnt-1,mid,ans;
while(l<=r){
mid=(l+r)>>1;
if(prime[mid]<n)
l=mid+1;
else{
ans=mid;
r=mid-1;
}
}
return ans;
}
int main(){
//double t1=clock();
init();
//printf("std:%.3f\n",(clock()-t1)/CLOCKS_PER_SEC);
int n;
while(scanf("%d",&n)==1&&n){
int pos1=getpos1(n);
int pos2=getpos2(n);
// printf("pos:%d prime:%d\n",pos,prime[pos]);
if(pos1==pos2){
printf("0\n");
}
else{
printf("%d\n",prime[pos2]-prime[pos1]);
}
}
return 0;
}
Prime Gap UVA - 1644
猜你喜欢
转载自blog.csdn.net/qq_36424540/article/details/81193207
今日推荐
周排行