Project Euler Self powers自幂求和问题:代码结果错误排查
错误核心要点
- 循环范围不符合题干要求:
range(1001)生成的是0~1000的整数序列,题目要求从1^1开始累加,多余计算了0**0(Python中该值为1),属于逻辑偏差。 - *核心遗漏:未对计算结果取模1010*。题目仅要求输出求和结果的最后十位数字,你直接输出完整大整数不会自动截断后十位;同时直接计算完整的`x**x`(例如10001000是3001位的超大数)会产生无意义的性能开销,利用模运算性质可以在每步计算时取模,完全不影响最终后十位的结果。
计算依据
模运算满足以下性质,不会影响最终后十位结果:
(a + b) % MOD = ((a % MOD) + (b % MOD)) % MOD
幂运算可直接取模:x^x % MOD无需算出完整的x^x值即可计算
本题中MOD = 10 ** 10,对运算结果取该值的模,得到的就是最后十位数值。
修正后代码
MOD = 10 ** 10 total = 0 # 循环范围改为1~1000符合题干要求 for x in range(1, 1001): # 直接用带模的幂运算,效率更高无超大中间值 total = (total + pow(x, x, MOD)) % MOD # 补前导零保证输出固定为10位 print(f"{total:010d}")
内容的提问来源于stack exchange,提问作者Roshan
相关产品推荐
相关产品推荐

