You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

两款不同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虽然逻辑更接近正确,但冗余的循环次数和重复输出的问题,既低效又输出混乱,同样不能直接使用。

高效且正确的质数检查思路

想要实现靠谱的质数检查,应该遵循以下逻辑:

  1. 先处理特殊情况:小于2的数不是质数;2是唯一的偶质数;
  2. 直接排除所有偶数;
  3. 从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 03:55:37