题目中的「本原数」定义为大于 1 且只能被 1 和自身整除的正整数,实际上就是通常所说的质数。
因此,问题转化为:对于每个给定的整数 x,找出与 x 绝对差值最小的本原数;若左右两边各存在一个等距的本原数,输出较小的那个。
核心做法:
在密码学中,常常需要用到一类特殊的整数,称为「本原数」:一个大于 1 的正整数,如果它只能被 1 和自身整除,则称其为本原数。
现在,对于给定的整数 x,请你找出与 x 绝对差值最小的本原数。如果左右两侧各存在一个等距的本原数,请输出较小的那个。
数据范围:测试数据组数 T 不超过 30,每次询问的 x 满足 1≤x≤109。
第一行包含一个整数 T(1≤T≤30),表示测试数据组数。 接下来 T 行,每行包含一个整数 x(1≤x≤109),代表一次询问。
对于每组询问,输出一行一个整数,表示距离 x 最近的本原数。
输入
3
2
1
6
输出
2
2
5
说明
2 自身就是本原数,因此答案为 2。1 不是本原数,距离 1 最近的本原数是 2(距离为 1),因此答案为 2。5 和 7,距离均为 1。根据规则,等距离时取较小的本原数 5,因此答案为 5。输入
2
14
1000
输出
13
997
说明
14 不是本原数,左右最近的本原数是 13(距离 1)和 17(距离 3),最小距离的本原数是 13,因此答案为 13。1000 附近的本原数有 997(距离 3)和 1009(距离 9),最近的是 997,因此答案为 997。输入
1
1000000000
输出
1000000007
说明
999999937,距离为 63;向右寻找,最近的本原数是 1000000007,距离为 7。最近的是 1000000007,因此答案为 1000000007。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册