Python除数计数代码性能优化求助:现有代码运行过慢无结果
优化计算除数个数的Python代码
原代码如下:
def f(n): count, k = 0, 1 while k*k < n: if n%k == 0: count += 2 k += 1 return count
这段代码计算除数个数时耗时过长,需针对以下部分修改以优化性能:
- 修复死循环逻辑:原代码仅在
n%k == 0时执行k += 1,若k不是n的因数,k会一直保持不变,导致循环无限执行,这是耗时过长的核心原因。必须将k += 1移出if分支,确保每次循环k都递增。 - 处理完全平方数的边界情况:原代码未考虑
k*k == n的场景,此时k是n的平方根,只能算作1个除数,而非2个,这会导致结果错误,同时也会让循环的终止条件不完整。 - 减少重复运算:循环中重复计算
k*k会增加开销,可提前用math.isqrt(n)(Python 3.8+)算出n的整数平方根,直接遍历到该值,既高效又能避免整数溢出问题。 - 改用更高效的循环结构:for循环在遍历固定范围时比while循环执行效率更高,代码可读性也更强。
优化后的示例代码:
import math def count_divisors(n): if n < 1: return 0 count = 0 sqrt_n = math.isqrt(n) for k in range(1, sqrt_n + 1): if n % k == 0: count += 1 if k * k == n else 2 return count
内容的提问来源于stack exchange,提问作者jieun kim
相关产品推荐
相关产品推荐

