首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么程序没有正确地寻找丢番图方程的通解

为什么程序没有正确地寻找丢番图方程的通解
EN

Stack Overflow用户
提问于 2020-11-13 20:21:40
回答 1查看 35关注 0票数 0

我编写了一个程序来寻找丢番图方程的通解,但是当我检查在线计算器时,这个解并不完全正确。例如,对于方程"45x-128y=177“,一般形式的解应该是”x=6549-128 k“和"y=2301-45k",但我得到了"x=6549+k_128”和"y=-2301+k_45“。我的代码:

代码语言:javascript
复制
import re

def extended_gcd(a, b):
    if a == 0:
        return (0, 1)

    (x, y) = extended_gcd(b % a, a)

    return (y - (b // a) * x), x


def gcd(a, b):
    if b == 0:
        return a
    return gcd(b, a % b)


def main():
    s = input('Enter the Diophantine equation: ')
    s1 = re.findall(r'\d+', s)
    a = int(s1[0])
    b = int(s1[1])
    c = int(s1[2])

    d = gcd(a, b)
    print(f'GCD({a},{b}) = {d}')

    if d % c != 0:
        print('This equation has an infinite set of solutions')
        a1 = a // d
        b1 = b // d
        print(f'Short equation: {a1}s + {b1}t = {1}')
        (s, t) = extended_gcd(a1, b1)

        x0 = (c // d) * s
        y0 = (c // d) * t

        print("General solution")
        print(f"x = {x0} + k * {b // d}")
        print(f"y = {y0} + k * {a // d}")
    else:
        print('This equation has no solution')


if __name__ == "__main__":
    main()

问题是什么,如何解决?

EN

回答 1

Stack Overflow用户

发布于 2020-11-13 20:49:35

Python的一个问题是正则表达式与负数不匹配(在示例中,s1[1]128而不是-128 )。要匹配符号,可以将regex匹配行更改为

代码语言:javascript
复制
    s1 = re.findall(r'[-+]?\d+', s)

所以s1[1]现在是正确的-128,因为您可以通过在正确的点打印它来检查它。

它仍然没有得到正确的答案,但至少在修复后输入应该是正确的。您应该反复检查您的算法编码是否正确,例如,打印中间结果,并对照手工(或Excel)计算检查它们。我们可以在这里帮助你解决编码问题,但不是你的算法问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64827560

复制
相关文章

相似问题

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