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

Python修改循环范围后返回空列表问题求助:寻找“近幂和数”程序异常排查

排查“近幂和数”程序大范围无结果的问题

嘿,我来帮你捋清楚这个问题!你定义的“近幂和数”是指自身的各位数字平方和等于自身±1的数对吧?先看你代码里的核心问题:

为什么大范围内返回空列表?

当数字位数变多后,各位数字平方和的最大值远小于数字本身:

  • 比如6位数的最大值是999999,它的各位平方和是 (9^2 \times 6 = 486),而你的循环从100000开始,这个数本身就比486大了近200倍;
  • 你代码里的判断条件是a == i-1 or a == i+1,也就是各位平方和要等于i±1,但i≥100000时,i-1≥99999,这比平方和的最大值486大太多了,根本不可能满足条件,自然返回空列表。

而10-100的两位数情况不一样:两位数的最大平方和是 (92+92=162),和两位数的最大值99的差距不大,所以存在像35(3²+5²=34=35-1)、75(7²+5²=74=75-1)这样符合条件的数。

修正思路:反向遍历找符合条件的数

既然大数字的平方和上限很低,我们可以反过来遍历所有可能的平方和数值,再检查这些数值的±1是否在目标范围内,且对应的数的平方和确实等于这个数值。

给你写个修正后的代码示例:

import math

# 封装计算各位数字平方和的函数,方便复用
def calculate_digit_square_sum(n):
    total = 0
    while n >= 1:
        digit = n % 10
        total += digit ** 2
        n = math.trunc(n / 10)
    return total

result_list = []
# 先确定目标范围内数字的最大平方和:6位数最大是999999,平方和为9²*6=486
max_possible_sum = 9 ** 2 * 6

for s in range(1, max_possible_sum + 1):
    # 检查s+1是否在目标区间,且它的平方和等于s
    candidate_plus = s + 1
    if 100000 <= candidate_plus <= 1000000:
        if calculate_digit_square_sum(candidate_plus) == s:
            result_list.append(candidate_plus)
    # 检查s-1是否在目标区间,且它的平方和等于s
    candidate_minus = s - 1
    if 100000 <= candidate_minus <= 1000000:
        if calculate_digit_square_sum(candidate_minus) == s:
            result_list.append(candidate_minus)

# 去重并排序后输出
result_list = sorted(list(set(result_list)))
print(result_list)

运行这段代码,就能找到你目标范围内符合条件的“近幂和数”啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 11:27:28