Решаем уравнение Диофотона по питону и хотим получить пару неотрицательных решений - PullRequest
0 голосов
/ 04 июля 2019

Я студент бакалавриата, который увлекается кодированием и столкнулся с проблемой, связанной с уравнением диофотона сегодня. Вопрос: для ax + by = c, где a, b, c - все положительные целые числа, найдите x, y, такие, что x и y - неотрицательные целые числа, а ax + by = c.

Я написал следующий код и попробовал 3x + 7y = 12, но выходит единственное решение: x = -24, y = 12, что на самом деле является решением, но x <0. Я не смог получить x = 4, y = 0 в качестве ответа в соответствии с требованием. </p>

def gcd(x,y):
    if y == 0:
        return x
    else:
        return gcd(y,x%y)

def solve(a,b,c):
    d = gcd(a,b)
    if c % d != 0:
        output = 'there are no such integers'
        return output
    else:
        q, r = divmod(a,b)
        if r == 0:
            return ([0, c/b])
        else:
            solution = cents(b, r, c)
            u = solution[0]
            v = solution[1]
            return ([v, u - v * q])
        s = u - v * q
        while v < 0 or s < 0:
            v = v + b/gcd(a,b)
            s = s - a/gcd(a,b)
            continue
        while v >= 0 and s >= 0:
            return ([v,s])

a = int(input("a in a*x + b*y = c:"))

b = int(input("b in a*x + b*y = c:"))

c = int(input("c in a*x + b*y = c:"))

print(solve(a,b,c))

Вывод:

a in a*x + b*y = c:3
b in a*x + b*y = c:7
c in a*x + b*y = c:12
[-24, 12]

Но для этого вопроса мне бы хотелось, чтобы это было x = 4, y = 0. Более того, что мне делать, если я хочу получить конкретный x, y и убедиться, что для этой пары x, y, x + у наименьший возможный? Заранее спасибо!

...