python编程实现:从键盘输入一个正整数n(n>2),请编程求解并输出大小最接近n的素数(n本身除外)
一、编程题目
从键盘输入一个正整数n(n>2),请编程求解并输出大小最接近n的素数(n本身除外)。
(温馨提示,结果可能是2个哦)
二、输入输出样例
输入样例:5
输出样例:3 7
输入样例:44
输出样例:43
输入样例:-1
输出样例:输入格式错误,请输入一个大于2的正整数!
三、编程实现
这个题目的关键点是要考虑最接近n的素数有可能不止1个。因此要在n两边进行素数的查找,并输出与n距离最近的一个或两个素数。
1、首先判断一个数是否是素数,很简单,只要判断是否只能被自身整除。
import math
def isPrime(num):
'''
判断一个数是否是素数
'''
for i in range(2,int(math.sqrt(num))+1):
if num % i == 0:
return False
return True
2、以输入的正整数n为起始点,分别向小于n和大于n的两个方向循环查找,直到找到素数为止,如果左边先找到,则左边找到的素数最接近n,如果右先找到,则右边找到的素数最接近n,如果左右先同时找到,找到的素数都是最接近n的。
def findPrimeCloseN(n):
'''
查找与n最接近的素数
'''
distance = 1
result = []
while (n-distance)>=2:
if isPrime(n-distance):
result.append(n-distance)
if isPrime(n + distance):
result.append(n + distance)
if result:
break
distance+=1
return result
这里定义一个distance表示向n左边和右边移动的距离,每次循环移动1步,然后判断当前这个数是否是素数,因为可能有两个最接近的素数,所以定义了一个result列表来存储。由于每次循环左右两边移动的距离是一样的,所以只要在左右两边找到一个或两个就是最近的,此时结束循环即可。
3、获取用户输入,判断用户输入的数字是否是合法的,不合法提示,合法则调用上面的方法,输出结果。
n = int(input())
if n<=2:
print('输入格式错误,请输入一个大于2的正整数!')
else:
result = list(map(str,findPrimeCloseN(n)))
print(' '.join(result))
这里注意,因为findPrimeCloseN方法返回的结果是Int类型的列表,这里转为str字符串类型的,因为join方法只只支持字符串类型的列表。
四、测试代码