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

生成数字排序后唯一质因数列表的Python代码问题求助

问题排查:获取唯一质因数列表的Python代码错误

输入n=100时,你的代码输出[2,5,10],不符合预期的[2,5],触发了AssertionError。以下是问题分析和修正方案:

代码问题分析

  1. 未彻底分解质因数:原代码在发现d能整除n时,仅执行一次n //= d就递增d,导致剩余的n可能仍包含小因子未被处理。比如处理n=100时,当d=5处理后n变为10,此时d递增到6,而6×6>10,循环直接退出,最后把合数10加入了结果列表。
  2. 无去重逻辑:若同一个质因数多次被整除(比如n=8),原代码会重复添加该质因数,导致结果包含重复项。

修正后的代码

def exercise_2(n): 
    primfac = []
    d = 2
    while d*d <= n:
        if n % d == 0:
            # 仅添加未出现过的质因数
            if d not in primfac:
                primfac.append(d)
            # 彻底移除n中所有d的因子
            while n % d == 0:
                n //= d
        d += 1
    # 剩余的n若大于1,必为未被处理的质数
    if n > 1:
        primfac.append(n)
    return primfac

关键改动说明

  • 嵌套内层while循环:当d是n的质因数时,持续将n除以d,直到n不再能被d整除,确保该质因数被彻底分解,后续不会再被处理。
  • 添加存在性检查:在将d加入列表前,先判断是否已存在,避免重复添加同一个质因数。
  • 最终剩余值处理:循环结束后,若n>1,则n本身是一个质数(因为所有小于等于其平方根的因子都已被处理),直接加入列表即可。

验证结果

  • 输入n=100,输出[2,5],符合预期;
  • 输入n=3674,输出[2,11,167],满足断言条件。

内容的提问来源于stack exchange,提问作者lncomp05

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:41:11