Python质因数分解程序运行结果异常,求优化修复方案
代码问题分析
- 两层循环逻辑冗余错误:外层遍历
a的逻辑完全无效,反而打乱了因数匹配的顺序 - 未除尽当前因数就跳转下一个值:找到可整除的
b后仅做一次除法就继续遍历,没有反复除尽当前最小因数,导致后续的合数(如4)也能匹配剩余的num,被错误加入结果列表 - 初始遍历上限
to基于原始num计算,而分解过程中num会不断缩小,固定上限既无意义也会增加不必要的遍历开销 - 变量名
dict是Python内置字典类型的关键字,覆盖后会影响后续内置功能的正常使用
修复后代码
def factors(num): res = [] # 从最小的质数2开始试除 b = 2 # 遍历上限取当前num的平方根即可,减少遍历次数 while b * b <= num: # 反复除尽当前因数b while num % b == 0: res.append(b) num = num // b b += 1 # 如果最后剩余的num大于1,说明本身是质数,加入结果 if num > 1: res.append(num) print(res) factors(2*2*2*2*2*2*2*2*2*2*2*2*2)
运行后输出:
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
可覆盖所有质因数分解场景,符合预期效果。
内容的提问来源于stack exchange,提问作者Manohar
相关产品推荐
相关产品推荐

