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

Project Euler第1题Python实现结果错误,排查理解偏差或代码Bug

如果我们列出所有10以下是3或5倍数的自然数,会得到3、5、6、9,这些倍数的和是23。请求出所有1000以下3或5的倍数的总和。

你遇到的问题属于代码本身存在逻辑Bug,对题目的理解没有偏差。
问题出在判断条件的多余限制:题目要求统计的是「3或5的倍数」,逻辑或规则下只要满足其中一个整除条件就可以计入,包括同时被3和5整除的15的倍数。但你写的两个判断条件都额外加了排除另一个数整除的逻辑,导致所有15的倍数既没有被加入mult3也没有被加入mult5,直接被漏算,最终结果偏小。

1000以下所有15的倍数的总和为33165,你得到的200003加33165正好等于正确答案233168。

修正后的代码示例

1. 基于原有逻辑修改,简化判断条件

total = 0
for i in range(1000):
    if i % 3 == 0 or i % 5 == 0:
        total += i
print(total)

2. 更高效的数学公式法(容斥原理,无需循环)

利用容斥原理:3的倍数总和 + 5的倍数总和 - 15的倍数总和(15的倍数被重复加了两次,需要减去一次)

def sum_multiples(n, limit):
    # 计算limit以下所有n的倍数的和
    count = (limit - 1) // n
    return n * count * (count + 1) // 2

print(sum_multiples(3, 1000) + sum_multiples(5, 1000) - sum_multiples(15, 1000))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:06:03