#P3518. Prime Gap

Prime Gap

题目描述(Description)

若两个连续素数 $p$ 和 $p + n$ 之间存在 $n - 1$ 个连续的合数(即大于 $1$ 且不是素数的正整数),则称这一段合数组成了一个长度为 $n$ 的素数间隙(prime gap)

例如,$23$ 和 $29$ 之间的数列 <24, 25, 26, 27, 28> 是 $5$ 个连续合数,因此称为长度为 $6$ 的素数间隙

你的任务是编写程序,对于给定的正整数 $k$,计算包含该数的素数间隙的长度。如果 $k$ 是素数(即它本身是间隙的边界之一),则其结果定义为 $0$。


输入格式(Input)

输入由若干行组成,每一行包含一个正整数。 每个输入的正整数 $k$ 满足:$1 < k \leq 1299709$(其中 $1299709$ 是第 $100000$ 个素数)。 输入以一行单独的数字 $0$ 结束。


输出格式(Output)

对于输入的每一个正整数 $k$,输出一行,表示包含该数的素数间隙的长度:

  • 如果 $k$ 是合数,则输出该合数所在的素数间隙的长度(即两个最近的素数之差)。
  • 如果 $k$ 是素数,则输出 $0$。

每行仅输出一个非负整数,不应包含任何其他字符。


输入样例

10
11
27
2
492170
0

输出样例

4
0
6
0
114

样例说明

  • 10 是合数,位于素数 711 之间,间隔长度为 11 - 7 = 4
  • 11 是素数,输出 0
  • 27 是合数,位于素数 2329 之间,间隔长度为 6
  • 2 是素数,输出 0
  • 492170 是合数,位于素数 492113492227 之间,间隔长度为 114