Python入门:求输入数最近质数的基础代码实现求助
解决找最近质数的问题(纯基础Python实现)
嘿,作为Python新手完全不用慌,咱们拆解成两个小问题一步步来,全用最基础的循环和判断就能搞定!
第一步:先写判断质数的基础函数
首先得搞明白怎么判断一个数K是不是质数:质数是大于1的自然数,除了1和它自己之外没有其他能整除它的数。咱们写个is_prime函数,逻辑超简单:
- 如果K小于2,直接返回False(因为质数得大于1)
- 从2开始循环到K的一半(不用算到K,因为如果K有大于它一半的因数,那对应的另一个因数肯定小于2,早被检查过了),如果有任何数能整除K,说明不是质数,返回False
- 循环结束都没找到能整除的数,那就是质数,返回True
代码如下:
def is_prime(k): # 小于2的数都不是质数 if k < 2: return False # 从2循环到k的一半(包含) for i in range(2, k//2 + 1): if k % i == 0: # 找到能整除的数,不是质数 return False # 循环完都没找到,是质数 return True
第二步:找最接近n的质数
接下来我们处理用户输入,然后找最近的质数:
- 先获取用户输入的数字n,转成整数
- 先检查n本身是不是质数,如果是直接输出就行(比如输入17,直接返回17)
- 如果n不是质数,我们需要分别找比n小的第一个质数和比n大的第一个质数
- 比较这两个质数和n的距离:
- 如果小的那个质数距离更近,输出它
- 如果大的那个更近,输出它
- 如果距离一样(比如输入6,5和7距离都是1),就输出较小的那个(也就是5)
对应的代码:
# 获取用户输入,转成整数 n = int(input("请输入数字n:")) # 先检查n本身是不是质数 if is_prime(n): print(n) else: # 找比n小的第一个质数 lower_prime = n - 1 while lower_prime >= 2: if is_prime(lower_prime): break lower_prime -= 1 # 找比n大的第一个质数 upper_prime = n + 1 while True: if is_prime(upper_prime): break upper_prime += 1 # 计算距离 distance_lower = n - lower_prime distance_upper = upper_prime - n # 判断输出哪个 if distance_lower < distance_upper: print(lower_prime) elif distance_upper < distance_lower: print(upper_prime) else: # 距离相等,输出较小的那个 print(lower_prime)
测试一下示例
- 输入17:因为17是质数,直接输出17
- 输入6:6不是质数,往下找第一个质数是5,往上是7,距离都是1,所以输出5
- 输入1:往下找不到(最小质数是2),所以直接输出2
- 输入4:往下是3,往上是5,距离都是1,输出3
这样所有逻辑都用最基础的循环、判断实现,完全没有复杂的知识点,新手也能看懂每一行的作用~
内容的提问来源于stack exchange,提问作者codinggirl
相关产品推荐
相关产品推荐

