不算很难,还是打素数表的问题,稍微处理处理就好
//============================================================================
// Name : 3518.cpp
// Author :
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int prime[100010], ans[1300000];
bool flag[1300000];
int n, num, t;
int main() {
freopen("a.txt", "r", stdin);
memset(flag, true, sizeof(flag));
flag[1] = false;
for(int i = 2;i <= 1299709/2;i++){
if(flag[i]){
for(int j = 2*i;j <= 1299709;j+=i){
flag[j] = false;
}
}
}
num = 0;
for(int i = 1;i <= 1299709;i++){
if(flag[i]){
prime[++num] = i;
}
}
for(int i = 1;i < num;i++){
ans[prime[i]] = prime[i+1]-prime[i];
}
t = 0;
for(int i = 1;i <= 1299709;i++){
if(ans[i] != 0){
t = ans[i];
}
else ans[i] = t;
}
while(scanf("%d", &n)&&n){
if(flag[n]) printf("0\n");
else printf("%d\n", ans[n]);
}
return 0;
}