Python质因数分解中如何正确统计质因数相乘的循环执行次数
问题根源定位
- 原代码中的计数变量
c在函数开头初始化后,没有随质因数切换做值重置:完成质因数2的次数统计后,c的值停留在3,后续统计质因数5时,会在这个残留值的基础上继续累加。 - 代入200的分解流程验证:处理完质因数2时
c=3,进入质因数5的整除环节后,连续两次执行除以5的操作,让c从3累计到5,最终输出错误的[5,5],和预期的次数统计逻辑不符。
修正实现
核心调整有两点:
- 每次进入新质因数的整除统计流程前,将计数器
c重置为0,避免上一轮的计数值残留 - 将原来的普通除法操作替换为整数整除
//,避免Python3中普通除法产生浮点数带来的精度问题
修正后的可运行代码:
def factor(N): f = [] k = 2 while k <= N: if N % k == 0: c = 0 # 重置计数器,开始统计当前质因数的出现次数 while N % k == 0: N = N // k c += 1 f.append([k, c]) else: k += 1 return f result = factor(200) print(result)
运行上述代码后,将输出符合预期的[[2, 3], [5, 2]]。
内容的提问来源于stack exchange,提问作者AllMywork
相关产品推荐
相关产品推荐

