用欧拉筛打表,二分搜索,过。。。。
#include <iostream>
#include <algorithm>
#include <string.h>
#include <stdio.h>
using namespace std;
#define ms(X) memset(X,0,sizeof(X))
bool isnP[1400000];
int mprime[110000],t=0;
void createp(void)
{
ms(isnP);
for(int i=2;i<1300000;i++)
{
if(!isnP[i]) mprime[t++]=i;
for(int j=0;j<t;j++)
{
if(i*mprime[j]>=1300000) break;
isnP[mprime[j]*i]=true;
if(i%mprime[j]==0) break;
}
}
}
int main(int argc, char const *argv[])
{
int n;
createp();
while(scanf("%d",&n)!=EOF&&n)
{
int l=0,r=t,m,flag=1;
while(l<r)
{
m=(l+r)>>1;
if(mprime[m]>n) r=m;
else if(mprime[m]<n) l=m+1;
else {printf("0\n");flag=0;break;}
}
if(flag) printf("%d\n",mprime[r]-mprime[r-1] );
}
return 0;
}