Python计算嵌套求和(双重Σ):新手求助实现方法与代码问题
解决双重求和公式的Python实现问题
Hey there! Let's break this down step by step since you're new to Python and programming—no worries, we'll get this sorted out.
首先,我们先明确你要计算的公式是:
$$\sum_{i=1}^n \sum_{k=1}^m (i + k)$$
你的代码存在的核心问题
先看一下你当前代码里的几个关键错误:
- 变量名冲突:内层循环用了
for i in range(...),这会覆盖外层循环的i变量,导致逻辑完全混乱,内层循环应该用k作为变量。 - 逻辑误解:你用
p = p * i做乘法,但公式要求的是求和i + k,完全不需要乘积操作,p这个变量其实是多余的。 - 初始化错误:
p = 1是乘积运算的初始化方式,但这里我们不需要乘积,所以这个初始化从根源上就不符合需求。
修正后的循环实现(直观易懂)
如果想直接按照双重求和的逻辑写代码,最直接的方式就是嵌套循环累加i + k,代码如下:
total = 0 # 用total代替sum,避免覆盖Python内置的sum函数 n, m = [int(i) for i in input().split()] for i in range(1, n + 1): for k in range(1, m + 1): total += i + k # 直接累加i+k的值到总和里 print(total)
这个版本完全贴合公式的逻辑:外层循环遍历每个i,内层循环遍历每个k,每次把i + k加到总和中。
更高效的数学公式简化版
当n和m很大时,嵌套循环的效率会很低。我们可以通过数学推导简化公式,直接计算结果:
推导过程:
- 拆分双重求和:$$\sum_{i=1}^n \sum_{k=1}^m (i + k) = \sum_{i=1}^n \left( \sum_{k=1}^m i + \sum_{k=1}^m k \right)$$
- 计算内层求和:$\sum_{k=1}^m i = m \times i$,$\sum_{k=1}^m k = \frac{m(m+1)}{2}$
- 代入后计算外层求和:$$\sum_{i=1}^n \left( m \times i + \frac{m(m+1)}{2} \right) = m \times \frac{n(n+1)}{2} + n \times \frac{m(m+1)}{2}$$
- 合并化简:$$\frac{mn(n+1) + mn(m+1)}{2} = \frac{mn(n + m + 2)}{2}$$
用Python实现这个公式的代码如下:
n, m = [int(i) for i in input().split()] total = (n * m * (n + m + 2)) // 2 # 用整数除法保证结果是整数 print(total)
这个版本不需要循环,计算速度极快,无论n和m多大都能瞬间得到结果。
内容的提问来源于stack exchange,提问作者Negativ3
相关产品推荐
相关产品推荐

