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

在Python中实现塔比特亲和数定理(Project Euler #21):PQR计算函数结果异常求助

问题排查与修复

嗨,这个问题很典型——你把Python里的幂运算符号搞错啦!

核心错误:误用^符号

在Python中,^不是幂运算(求次方),而是按位异或运算符。而真正的幂运算应该用**(双星号),或者pow()函数。

另外还要注意运算符优先级:*的优先级比^高,所以你原来的代码会先计算乘法,再做异或,完全偏离了公式的本意。

错误计算拆解(以n=2为例)

我们来看看你原来的代码为什么会得到[6,3,16]:

  • p = (3 * 2^(n - 1) - 1) → 实际执行的是 (3*2) ^ (2-1) -1 → 6^1 -1 → 7-1=6
  • q = (3 * 2^n) - 1 → 实际执行的是 (3*2)^2 -1 → 6^2 -1 →4-1=3
  • r = (9 * 2^((2*n) - 1) - 1) → 实际执行的是 (9*2)^3 -1 →18^3 -1 →17-1=16

修复后的代码

把所有的^换成**,同时为了可读性,给幂运算部分加上括号(虽然**优先级比*高,不加括号也能正确计算,但加括号更清晰):

def getPQR(n):
    pqr = []
    p = 3 * (2 ** (n - 1)) - 1
    pqr.append(p)
    q = 3 * (2 ** n) - 1
    pqr.append(q)
    r = 9 * (2 ** ((2 * n) - 1)) - 1
    pqr.append(r)
    return pqr

验证结果

当n=2时,调用getPQR(2)会返回[5, 11, 71],完全符合你的预期!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 08:38:15