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

验证求解多变量三次丢番图方程整数解的Python代码正确性

多变量三次丢番图方程求解代码正确性验证

我需要求解一个多变量三次丢番图方程的整数解,变量取值区间为range(-10,11)。该方程为:

a³ + b³ + c³ + d³ + e³ - (a + b + c + d + e)³ = 0

请问以下Python代码是否正确?

from itertools import product
def find_solutions():
    possible_values = range(-10, 11)
    variable_combinations = product(possible_values, repeat=5)
    solutions = []
    for combination in variable_combinations:
        if sum(combination) == 0 and sum(i**3 for i in combination) == 0:
            sorted_solution = tuple(sorted(combination))
            if sorted_solution not in solutions:
                solutions.append(sorted_solution)
    return solutions

代码正确性分析

这段代码不正确,核心问题是错误地将原方程等价于「变量和为0且变量立方和为0」,但原方程的等价条件应该是「变量立方和等于变量和的立方」,两者并不等价。

举个反例:组合(0, 0, 0, 0, 5)代入原方程,左边为0³+0³+0³+0³+5³=125,右边为(0+0+0+0+5)³=125,显然满足方程,但代码中sum(combination)=5≠0,会被直接排除,导致漏解。

另外,代码用列表判断去重的方式效率较低,但这属于次要问题,核心的条件判断错误才是关键。

修正后的代码

要正确求解,需直接使用原方程的判断条件,同时优化去重逻辑:

from itertools import product

def find_solutions():
    possible_values = range(-10, 11)
    variable_combinations = product(possible_values, repeat=5)
    solutions = set()
    for combination in variable_combinations:
        total = sum(combination)
        if sum(i**3 for i in combination) == total ** 3:
            solutions.add(tuple(sorted(combination)))
    return sorted(solutions)

说明:

  • 直接验证原方程条件sum(i**3) == total**3,避免遗漏解
  • 使用集合存储排序后的解,自动完成去重,比列表的in判断效率更高
  • 最后返回排序后的列表,保证结果有序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 07:23:18