SymPy可以求解Diophantine方程,但没有生成正解的内置方法。使用Sage可以轻松完成此任务:这是四行代码,可生成方程式的所有 。
p = MixedIntegerLinearProgram()
w = p.new_variable(integer=True, nonnegative=True)
p.add_constraint(411*w[0] + 295*w[1] + 161*w[2] == 3200)
p.polyhedron().integral_points()
输出是 ((4, 2, 6),)
在幕后,integral_points
很可能只会运行多个循环;尽管当这似乎不起作用时,它会尝试使用Smith范式。
我知道您想要积极的解决方案,但是(a)很容易从答案中排除任何包含零的元组;(b)在求解之前,也很容易用x-1等替换x;(c)坚持“否定性”使得使用 上述混合整数线性编程模块可以轻松创建多面体。
根据文档,也可以直接从不等式(“ Hrep”)构建多面体对象。这将允许人们明确地说x> = 1,依此类推,但是我在这条路线上还没有成功。