从键盘输入一个整数,输出距离该数最近的素数。根据输入的数不同,此问题可能有一个答案(或者比输入的数大或者比输入的数小),也可能需要输出两个值(一个比输入的数大,一个比输入的数小,两个距离输入的数一样近)。PS:数学意义上的最小素数是2,例如,若输入-213,结果应是2。
不要太高深
1.输入数a(范围有吗)
2.判断a是否小等于于2?(最近素数是否可以a本身)
小于2的最近素数都是2
大于2,则从a分别向上和向下递增递减找到最近的两个素数(s1,s2)
判断s1,s2与a的距离(差值),相等就输出s1,s2.否则返回距离小的
取值范围,可能影响程序执行时间
#include <stdio.h>
int isp(int n)
{
if (n == 2) return 1;
for (int i = 2; i < n; i++)
{
if n % 2 == 0 return 0;
}
return 1;
}
void solve(int n)
{
if (n <= 2) { printf("%d", 2) return; }
int r1 = n;
while (!isp(r1)) r1--;
int r2 = n;
while (!isp(r2)) r2++;
if (r2 - n == n - r1 && r2 != r1) { printf("%d %d", r1, r2) return; }
if (r2 - n > n - r1) printf("%d", r1) else printf("%d", r2);
}
int main()
{
int n;
scanf("%d", &n);
solve(n);
}