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

Python脚本求质数与快乐数交集:primew()生成非质数

问题分析与解决方案

primew()函数写入121这类非质数,核心原因是质数判断逻辑存在漏洞——121是11的平方,若原判断逻辑未检查到平方根以内的因数,就会误将其判定为质数。

修正后的primew()实现

def primew():
    primes = []
    with open('prime.txt', 'w') as f:
        for num in range(2, 1001):
            is_prime = True
            # 优化:只需检查到num的平方根,覆盖所有可能的因数
            for i in range(2, int(num**0.5) + 1):
                if num % i == 0:
                    is_prime = False
                    break
            if is_prime:
                primes.append(str(num))
                f.write(f"{num}\n")

错误原因说明

如果原代码的循环终止条件是num//2或更小范围,会漏掉11这类等于平方根的因数(121÷11=11)。将循环终止条件设为int(num**0.5)+1,可以确保覆盖所有可能的因数:若num存在大于其平方根的因数,必然对应一个小于平方根的因数,只需检查到平方根即可完成准确判断。

验证步骤

  1. 调用primew()重新生成prime.txt,此时121会被正确排除(循环中会检测到121%11==0,判定为非质数)。
  2. 调用ishr()生成happy.txt。
  3. 执行overlap()即可得到正确的交集结果。

内容的提问来源于stack exchange,提问作者MUGWANEZA MANZI Audace

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:42:02