You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python求0到max间可被divisor整除的数的个数:代码优化咨询

更优实现方案分析

你的代码逻辑是正确的,但循环遍历每个数的方式在max数值很大时(比如百万级以上)效率会很低。下面提供几种更高效的替代方案:

数学计算方案(最优)

核心思路是用数学公式直接推导结果,时间复杂度为O(1),完全不需要遍历:
在0到max-1(对应你代码里range(max)的区间)范围内,能被divisor整除的数的个数等于 (max - 1) // divisor + 1。

  • (max - 1) // divisor 得到小于max的最大倍数对应的商(比如max=10、divisor=3时,(10-1)//3=3,对应9=3*3)
  • 加1是因为要包含0这个特殊值(0是任何非零数的倍数)

实现代码:

def divisible(max_num, divisor):
    if divisor == 0:
        raise ValueError("除数不能为0")
    return (max_num - 1) // divisor + 1

print(divisible(100, 10))  # 输出10
print(divisible(10, 3))     # 输出4
print(divisible(144, 17))   # 输出9

优化迭代方案

如果偏好迭代实现,可以利用range的步长特性,直接生成所有符合条件的数,避免逐个判断取模:

def divisible(max_num, divisor):
    if divisor == 0:
        raise ValueError("除数不能为0")
    # 从0开始,以divisor为步长生成所有小于max_num的数,直接取长度
    return len(range(0, max_num, divisor))

print(divisible(100, 10))  # 输出10
print(divisible(10, 3))     # 输出4
print(divisible(144, 17))   # 输出9

这个方案的循环次数远少于原代码,且不需要执行取模运算,效率提升明显。

边界情况说明

不管用哪种方案,都建议加上除数为0的判断,避免触发ZeroDivisionError,让函数更健壮。

内容的提问来源于stack exchange,提问作者noah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 03:00:07