如何通过函数判断素数?现有仅校验正整数的isPrime代码如何完善
完整素数检测功能实现
首先先明确素数的定义:仅能被1和自身整除的大于1的正整数,我们可以基于你现有的校验逻辑补充如下优化后的判断逻辑:
实现思路
- 先修正边界校验逻辑:1 不属于素数,所以小于等于1的数值直接返回False
- 特殊值处理:2 是唯一的偶素数,直接返回True
- 快速排除偶数:所有大于2的偶数都不可能是素数,直接返回False,减少后续计算量
- 因数范围优化:判断因数时不需要遍历到
val-1,仅需要遍历到val的平方根即可——如果val存在大于平方根的因数,必然存在一个对应的小于平方根的因数,此前已经完成校验 - 遍历步长优化:因为已经排除了偶数,后续仅需要遍历奇数即可,步长设为2,进一步减半计算量
完整代码
import math def isPrime(n): ''' Check if a number is a prime number ''' # 兼容非数字输入的异常场景 try: val = int(n) except ValueError: return False if val <= 1: return False # 处理唯一的偶素数 if val == 2: return True # 排除所有大于2的偶数 if val % 2 == 0: return False # 遍历到平方根即可,步长2只检查奇数 for i in range(3, int(math.sqrt(val)) + 1, 2): if val % i == 0: return False return True
简单测试示例
print(isPrime(2)) # 输出 True print(isPrime(9)) # 输出 False print(isPrime(17)) # 输出 True print(isPrime(-3)) # 输出 False print(isPrime(1)) # 输出 False
内容的提问来源于stack exchange,提问作者learner
相关产品推荐
相关产品推荐

