两款不同Prime Number Checker对比:哪款更高效且适合选用?
两款质数检查器的效率对比与选择建议
先看你给出的两段代码:
代码1
def prime_checker(number): if number % 2 == 0 or number % 3 == 0 or number % 5 == 0: print("It's not a prime number") else: print("It's a prime number")
代码2
def prime_checker(number): is_prime = True for i in range(2,number): if number % i == 0: is_prime = False if is_prime: print("It's a prime number") else: print("It's not a prime number")
两段代码的核心问题
- 代码1逻辑完全错误:它只检查能否被2、3、5整除,漏掉了大量关键情况。比如49(7×7),它不能被2、3、5整除,代码会错误判定为质数;1不是质数,但代码会输出“是质数”;甚至2、3、5本身是质数,代码会直接判定为“不是质数”,完全搞反了逻辑。
- 代码2逻辑缺陷+效率极低:首先它在循环的每一次迭代都会打印结果,比如输入5,会连续打印三次“是质数”,输出完全混乱;其次循环要从2跑到
number-1,比如检查10000,要循环9998次——实际上检查质数只需要循环到sqrt(number)就够了,因为如果n有一个大于sqrt(n)的因数,那必然有一个对应的小于sqrt(n)的因数,多余的循环纯粹浪费性能。
效率对比与选择
如果只看运行速度,代码1确实比代码2快得多,但它的逻辑错误导致根本无法完成质数检查的任务,完全没有实用价值。代码2虽然逻辑更接近正确,但冗余的循环次数和重复输出的问题,既低效又输出混乱,同样不能直接使用。
高效且正确的质数检查思路
想要实现靠谱的质数检查,应该遵循以下逻辑:
- 先处理特殊情况:小于2的数不是质数;2是唯一的偶质数;
- 直接排除所有偶数;
- 从3开始,只检查奇数,循环到
sqrt(number)即可。
示例代码:
import math def prime_checker(number): if number <= 1: print("It's not a prime number") return if number == 2: print("It's a prime number") return if number % 2 == 0: print("It's not a prime number") return # 检查从3到sqrt(number)的所有奇数 for i in range(3, int(math.sqrt(number)) + 1, 2): if number % i == 0: print("It's not a prime number") return print("It's a prime number")
内容的提问来源于stack exchange,提问作者Ing Kea Meng
相关产品推荐
相关产品推荐

