Python

Программирование на языке Пайтон

Дана дробь 1. Требуется ее сократить, то есть записать это же число в виде 2, где c — целое число, d — натуральное число и d минимальное возможное.

Входные данные
Вводятся два целых числа a и b (–100≤a≤100, 0<b≤100).

Выходные данные
Выведите два числа c и d.

Оценка задачи

1 балл получат программы, правильно решающие задачу для случая положительного числа a.

Примеры
входные данные
3 6
выходные данные
1 2
входные данные
-2 5
выходные данные
-2 5
ЖП
Жан Поль
617
Для сокращения дроби 1/a требуется найти такое натуральное число d, что a и d будут взаимно простыми, т.е. не имеют общих делителей, кроме 1. Тогда числитель будет равен d, а знаменатель — a*d.

Для нахождения наибольшего общего делителя a и b можно воспользоваться алгоритмом Евклида. Он заключается в следующем:

  • Если a делится на b, то НОД(a,b) = b.
  • - Если b делится на a, то НОД(a,b) = a.
  • - Если a не делится на b, то НОД(a,b) = НОД(b,a%b), где % обозначает операцию остатка от деления.
Применяя этот алгоритм последовательно, мы найдем НОД(a,b). Затем, чтобы найти искомую дробь вида 1/2, достаточно поделить числитель и знаменатель на НОД(a,b).

Пример решения на языке Python:

 a, b = map(int, input().split())

# находим наибольший общий делитель a и b
def gcd(x, y):
while y != 0:
x, y = y, x % y
return x
d = gcd(abs(a), b)

# получаем результат
c = a // d
d = b // d
print(c, d)
```

В этом коде мы сначала находим НОД(a,b) функцией gcd, применяем алгоритм Евклида. Затем делим числитель и знаменатель на этот НОД и выводим результат. Обратите внимание, что мы берем модуль a перед тем, как искать НОД, чтобы программа работала корректно для отрицательных a.
ИК
Иван Кореновский
1 553
Лучший ответ
 from math import gcd 
a, b = map(int, input().split())
c = gcd(a, b); print(a / c, b / c)
Или так вот ещё можно:
 import fractions 
a, b = map(fractions.Fraction, input().split())
c, d = str(a / b).split('/'); print(c, d)