生成数字排序后唯一质因数列表的Python代码问题求助
问题排查:获取唯一质因数列表的Python代码错误
输入n=100时,你的代码输出[2,5,10],不符合预期的[2,5],触发了AssertionError。以下是问题分析和修正方案:
代码问题分析
- 未彻底分解质因数:原代码在发现
d能整除n时,仅执行一次n //= d就递增d,导致剩余的n可能仍包含小因子未被处理。比如处理n=100时,当d=5处理后n变为10,此时d递增到6,而6×6>10,循环直接退出,最后把合数10加入了结果列表。 - 无去重逻辑:若同一个质因数多次被整除(比如
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
相关产品推荐
相关产品推荐

