Python统计整数因子个数的函数输出结果不符合预期
问题根源
现有函数的统计逻辑是计算整数的全部正因子(包含1和整数自身)的总数量,和当前需求的统计规则完全不匹配。
对照测试用例的数值差可以确认:当前需求是统计排除1、排除整数自身的真因子个数,所有测试用例的预期值刚好等于原函数输出值减去2,比如:
- 质数5、97除了1和自身没有其他可整除的数,所以结果为0
- 6的非1、非自身可整除的数是2、3,共2个
- 105的非1、非自身可整除的数是3、5、7、15、21、35,共6个
- 999的非1、非自身可整除的数是3、9、27、37、111、333,共6个
修正方案
调整循环的遍历范围,直接跳过对1和整数自身的判断,核心修改点是把原来range(1, integer+1)的遍历范围,改成range(2, integer),从根源上避免把不需要统计的两个值计入结果:
def num_factors(integer): result = 0 # 遍历范围取2到integer-1,自动排除1和整数本身 for i in range(2, integer): if integer % i == 0: result += 1 return result print(num_factors(5)) print(num_factors(6)) print(num_factors(97)) print(num_factors(105)) print(num_factors(999))
运行修正后的代码,输出和预期完全一致:
0 2 0 6 6
优化提示
原逻辑的遍历方式效率较低,对于较大的整数会做大量无意义判断。可以将遍历上限调整为整数的平方根,遇到成对的因子时直接计数2个,进一步降低循环次数,该优化不影响最终的统计结果准确性。
内容的提问来源于stack exchange,提问作者M46
相关产品推荐
相关产品推荐

