问题
分析
水题,不过因为数据原因,直接从n的位置往前,往后搜索,更加快
#include <cstdio>
#include <iostream>
#include <cmath>
using namespace std;
const int maxn=1299709+10000;
int n,vis[maxn],pre[maxn],post[maxn];
void init(){
int m=sqrt(maxn+0.5);
for(int i=2;i<=m;++i){
if(vis[i]==0){
for(int j=i*i;j<maxn;j+=i){
vis[j]=1;
}
}
}
int p=2;
for(int i=2;i<maxn;++i){
if(vis[i]==0) p=i;
pre[i]=p;
}
p=maxn;
for(int i=maxn-1;i>1;--i){
if(vis[i]==0) p=i;
post[i]=p;
}
}
int main(void){
init();
while(scanf("%d",&n)==1 && n){
if(vis[n]==0) printf("0\n");
else printf("%d\n",post[n]-pre[n]);
}
return 0;
}