poj 3518
不算很难,还是打素数表的问题,稍微处理处理就好
//============================================================================ // 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; }