Top.Mail.Ru
Ответы

Здравствуйте, помогите пожалуйста решить задачу из курса Сириуса, язык Python

Диофантово уравнение
Даны натуральные числа a, b, c. Если уравнение ax+by=c имеет решения в целых числах, то выберите то решение, в котором число x имеет наименьшее неотрицательное значение, и выведите это решение (два числа x и y через один пробел). Если решения не существует, то выведите −1.

Входные данные

Входные данные — натуральные числа a, b и c. Числа заданы на одной строке через пробел и не превышают 109.

Выходные данные

Выведите ответ на задачу.

Примеры

Ввод
1 2 3
2 2 2

Вывод
1 1
0 1

По дате
По Рейтингу
Аватар пользователя
Мастер
1234567891011121314151617181920212223242526272829303132
 import time 
 
def gcd(a, b): 
    while a != b: 
        if a > b: 
            a, b = b, a 
        b = b - a 
    return a 
 
a, b, c = int(input()), int(input()), int(input()) 
print("\nуточнение: a*x + b*y = c\n") 
print(f"Ввод данных: a = {a}, b = {b}, c = {c}.\n") 
 
the_time = time.clock() 
d = gcd(a, b) 
if c % d != 0: 
    print("Невыполнимый!") 
if c % d == 0: 
    a //= d 
    b //= d 
    c //= d 
    for k in range(a+1): 
        if (c-b*k) % a == 0: 
            y = k 
            x = (c-(b*k)) // a 
        else: 
            print("\nНичего не происходит\n") 
            break 
seconds = (time.clock() - the_time) / time.CLOCKS_PER_SEC 
 
print(f"output data: x = {x}, y = {y}.\n") 
print(f"runtime: {seconds} sec.\n")