我想要丢番图转换 t_0 ---> n

I want diophantine convert t_0 ---> n

我想要丢番图转换 (t_0 ---> n)

from sympy import *
var('x y t_0 n')
def myDiophantine(myf):
    myf_diox = list(diophantine(myf))[0][0]
    myf_dioy = list(diophantine(myf))[0][1]
    print("#1#",type(myf_diox),myf_diox)
    myf_diox = myf_diox.subs({t_0:n})
    print("#2#",type(myf_diox),myf_diox)
    return myf_diox,myf_dioy
myf=5**4*x-2**4*y-1
print("#3#",myDiophantine(myf))

var('z')
print("#4#",type(myf),myf)
print("#5#",type(myf.subs({x:z})),myf.subs({x:z}))
#1# <class 'sympy.core.add.Add'> 16*t_0 + 1
#2# <class 'sympy.core.add.Add'> 16*t_0 + 1
#3# (16*t_0 + 1, 625*t_0 + 39)
#4# <class 'sympy.core.add.Add'> 625*x - 16*y - 1
#5# <class 'sympy.core.add.Add'> -16*y + 625*z - 1

我用过潜艇?它无法被替换。 有没有更好的方法?

我要

#2# <class 'sympy.core.add.Add'> 16*n + 1

参考

20220401

from sympy import *
var('x y t_0 n')
def myDiophantine(myf):
    d=diophantine(myf)
    params = Tuple(*d).free_symbols - myf.free_symbols;
    d=Tuple(*d).xreplace(dict(zip(params, [n])))
    myf_diox = list(d)[0][0]
    myf_dioy = list(d)[0][1]
    return myf_diox,myf_dioy
myf=5**4*x-2**4*y-1
myg=myDiophantine(myf)
print("#",myg[0],myg[1])
# 16*n + 1 625*n + 39

https://www.wolframalpha.com/input?i=5%5E4*x-2%5E4*y%3D1

5^4x-2^4y=1

整数解

x=16n+1,y=625n+39,n个元素Z

>>> myf = 5**4*x-2**4*y-1
>>> d = diophantine(myf)

获取用于解决方案的参数列表(将 set-of-tuples 解决方案转换为 Tuple-of-Tuples):

>>> params = Tuple(*d).free_symbols - myf.free_symbols; params
{t_0}

创建包含所需替换项的替换字典

>>> Tuple(*d).xreplace(dict(zip(params, [n])))
((16*n + 1, 625*n + 39),)

为什么你的方法不起作用?

>>> Symbol('t_0') in params
False
>>> Symbol('t_0',integer=True) in params
True

符号是根据名称和假设进行匹配的,而不仅仅是名称。

关于获得更小的丢番图方程系数:这是 known issue