当前位置: 首页 > 面试题库 >

获取线性方程的所有正整数解

谷梁凌
2023-03-14
问题内容

我玩的游戏有一个谜题,涉及解决以下方程式:

x*411 + y*295 + z*161 = 3200

不想认为我只是将其拍打成sympy,到那时我还没有真正用完:

>>> from sympy import *
>>> x, y, z = symbols('x y z', integer=True, positive=True)
>>> solve(x*411 + y*295 + z*161 - 3200, [x, y, z])
[{x: -295*y/411 - 161*z/411 + 3200/411}]

嗯,这只给了我一个从属的解决方案,但是我希望将变量约束到的域中所有可能的解决方案,例如(假设没有其他解决方案)[{x: 4, y: 2, z:6}][(4, 2, 6)]

当然,我现在可以在嵌套循环中手动替换两个变量,或者手动解决它(就像我在上面的解决方案中所做的那样),但是我想知道如何让sympy(或另一个库)为我做这件事。


问题答案:

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)坚持“否定性”使得使用
上述混合整数线性html" target="_blank">编程模块可以轻松创建多面体。

根据文档,也可以直接从不等式(“
Hrep”)构建多面体对象。这将允许人们明确地说x>
= 1,依此类推,但是我在这条路线上还没有成功。

使用SymPy

SymPy的Diophantine模块的输出是一个参数化解决方案,例如

(t_0, 2627*t_0 + 161*t_1 - 19200, -4816*t_0 - 295*t_1 + 35200)

在您的示例中。可以将其循环使用,以非常有效的方式生成解决方案。症结在于寻找参数t_0和t_1的界限。由于这只是一个示例,我查看了上面的最后一个表达式,并将限制35200/4816和35200/295直接插入下面的循环中。

from sympy import *
x, y, z = symbols('x y z')
[s] = diophantine(x*411 + y*295 + z*161 - 3200)
print(s)
t_0, t_1 = s[2].free_symbols
for t0 in range(int(35200/4816)+1):
    for t1 in range(int(35200/295)+1):
        sol = [expr.subs({t_0: t0, t_1: t1}) for expr in s]
        if min(sol) > 0:
            print(sol)

输出为[4, 2, 6]



 类似资料:
  • 本文向大家介绍C#获取所有进程的方法,包括了C#获取所有进程的方法的使用技巧和注意事项,需要的朋友参考一下 在使用C#进行相关编程的时候,有时候我们需要获取系统相关的进程信息。那么在C#中如何获取系统的所有进程那?下面请跟小编一起来操作。 1、首先新建一个控制台程序,这里主要是为了方便演示,控制台程序相对比较简单,如下图所示: 2、然后导入进程相关的操作类,主要是diagnostics,如下图所示

  • 我正在使用MPAndroid图表绘制一个三次图使用几个点。当前,库将这些点连接起来并绘制一个平滑的图形。我使用的代码是: 为了在数组中获得一条光滑的曲线,我想得到一个所有中间点的列表,这些中间点是库在我给出的中间点之间绘制的。有没有办法做到这一点? 谢谢

  • 问题内容: 有什么方法可以获取当前JVM中所有正在运行的线程的列表(包括不是由我的类启动的线程)? 是否还可以获取列表中所有线程的和对象? 我希望能够通过代码做到这一点。 问题答案: 要获得一个可迭代的集合:

  • 本文向大家介绍获取input标签的所有属性的方法,包括了获取input标签的所有属性的方法的使用技巧和注意事项,需要的朋友参考一下 1.用jquery $("input[name='btnAdd']").attr("value")   获取value属性值,其它属性换attr的参数就OK 2.通过点来获取: 以上就是小编为大家带来的获取input标签的所有属性的方法全部内容了,希望大家多多支持呐喊

  • 有没有一种方法可以在Laravel中检索具有所有属性的模型,即使这些属性为空?它似乎只返回属性不为null的模型。 原因是我有一个函数,如果模型中存在属性,它将从数组中更新模型属性。在设置模型之前,我使用property_exists()函数检查模型是否具有特定属性。数组键和模型属性应该匹配,所以它就是这样工作的。 如果模型已经设置了属性,它可以正常工作,因为属性存在并从数组中获取值。但是,如果属

  • 问题内容: 如何在此页面上获取此“ h2”标题的所有“ href”属性? 我尝试过的没有得到href的是: 这没有获得“ a”标签的链接。如果我在“ a”标签上找到了所有元素,它将返回页面上的每个href(这不是我想要的)。我只想返回上述标题,但能够获取其url“ href”属性。 问题答案: 这是从所有页面获取所有书籍的代码: