首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我想要渐近gcdex(ax + by =c,这是一个线性丢番图方程)。

我想要渐近gcdex(ax + by =c,这是一个线性丢番图方程)。
EN

Stack Overflow用户
提问于 2022-04-06 04:21:49
回答 1查看 200关注 0票数 0

我想要卡尔

https://en.wikipedia.org/wiki/Diophantine_equation#Examples

ax + by =c这是一个线性丢番图方程。

我试着

我认为你替代H的方式不太好。我该怎么修呢?

x,y整数

(1)(2)5^4_x-2^4_y=1

(3)5^5-2^5_y=1

(4)11^5-2^5_y=1

代码语言:javascript
运行
复制
from sympy.solvers.inequalities import reduce_rational_inequalities
from sympy import *
import math
var('x y n')
def myEq(f,g,h,myMax):
    myN = Symbol('myN', real=True)
    myGcdex = gcdex(f, -g)
    myX = g * n + myGcdex[2]
    myY = solve((f * x - g * y - h).subs({x: myX}), y)[0]
    myN = math.ceil(reduce_rational_inequalities([[myX.subs({n: myN}) >= myMax]], myN).lhs)
    return myX.subs({n: myN}),myY.subs({n: myN})
print("#(1)",myEq ( 5**4,2**4,1,  0) )
print("#(2)",myEq ( 5**4,2**4,1, 10) )
print("#(3)",myEq ( 5**5,2**5,1,100),    "????<correct>x=125,y=12207")
print("#(4)",myEq (11**5,2**5,1,  0)," ","????<correct>x= 19,y=95624")

#(1) (1, 39)
#(2) (17, 664)
#(3) (129, 100781/8) ????<correct>x=125,y=12207
#(4) (1, 80525/16)   ????<correct>x= 19,y=95624
#
#〇(1)nxy 0 16*n + 1 625*n + 39          <correct>x = 16 n + 1  , y = 625 n + 39      , n=0
#〇(2)nxy 1 16*n + 1 625*n + 39
#×(3)nxy 4 32*n + 1 3125*n + 781/8      <correct>x = 32 n + 29 , y = 3125 n + 2832   , n=3
#×(4)nxy 0 32*n + 1 161051*n + 80525/16 <correct>x = 32 n + 19 , y = 161051 n + 95624, n=0

参考

I want function convert from xy to cells

https://mathworld.wolfram.com/Congruence.html

(20220407)

代码语言:javascript
运行
复制
MY_diox( 5**4*x-2**4*y-1,  0) # ((  1,    39), (16*n - 15,    625*n -   586))
MY_diox( 5**4*x-2**4*y-1, 10) # (( 17,   664), (16*n +  1,    625*n +    39))
MY_diox( 5**5*x-2**5*y-1,100) # ((125, 12207), (32*n + 93,   3125*n +  9082))  
MY_diox(11**5*x-2**5*y-1,  0) # (( 19, 95624), (32*n - 13, 161051*n - 65427))

(20220410)

参圣

Get all positive integral solutions for a linear equation

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-06 16:39:42

看起来你想要得到方程的一个特定的解,它的x值是一定的。如果你解决了这个参数的不等式,你可以把它转换成整数上的一个区间,只需选择第一个这样的整数。一个在n = 1上给出这个值的修正方程也可以用原点的偏移来给出。

代码语言:javascript
运行
复制
def diox(eq, x):
    """
    >>> from sympy.abc import x, y
    >>> eq = 5**5*x-2**5*y-1
    >>> diox(eq, 30)
    ((61, 5957), (32*n + 29, 3125*n + 2832))
    """
    s = diophantine(eq)
    assert len(s) == 1
    a, b = s.pop()
    p = a.free_symbols
    assert len(p) == 1
    p = p.pop()
    i = solve(a >= x).as_set().intersection(Integers)
    if i.start.is_infinite:
        i = i.sup
    else:
        i = i.start
    t = Tuple(a, b).xreplace({p: i})
    e = Tuple(a, b).xreplace({p: Symbol('n')+i-1})
    return t, e
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71761022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档