题目要求:对于每个给定整数 x,找到一个与 x 的绝对差最小的质数 p;如果存在两个这样的质数,则输出较小的那个。
核心做法是:
先写一个判定质数的函数,再从 x 开始向两边同时扩展查找。
具体来说,设当前距离为 d:
笨蛋同学想给"取模"操作准备一些新的模数,这些模数必须是质数。现在,笨蛋同学随机选择了一个整数 x,请你找到一个质数 p,使得 ∣p−x∣ 尽可能小。
如果同时存在两个质数与 x 的距离相同(也就是 x 左右两侧等距各有一个质数),请输出较小的那个质数。
每个测试文件均包含多组测试数据。第一行输入一个整数 T(1≤T≤30) 代表数据组数,每组测试数据描述如下:
每组测试数据在一行上输入一个整数 x(1≤x≤109),表示给定的数。
对于每一组测试数据,新起一行输出一个整数,表示与 x 的绝对差值最小的那个质数(若等距,取较小者)。
输入
6
1
4
10
20
1000000000
31
输出
2
3
11
19
1000000007
31
说明
对于 x=1,最近的质数是 2。
对于 x=4,与 4 等距的质数为 3 与 5,根据"等距取较小"的规定,输出 3。