验证求解多变量三次丢番图方程整数解的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
相关产品推荐
相关产品推荐

