Как правильно сократить дробь n/m, используя алгоритм Евклида?
Что делать, что мой код упрощает дроби не совсем так? То есть при вводе 16 6 он упрощает до 4 1. А надо до 8 3?
![]()
НОД(a, b) вычисляется алгоритмом Евклида
Ну НОД можно реализовать например так:
![]()
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.6.8.43486
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Name already in use
python_lessons / python_coursera / 4_week / 58_Сократите дробь.py /
- Go to file T
- Go to line L
- Go to definition R
- Copy path
- Copy permalink
- Open with Desktop
- View raw
- Copy raw contents Copy raw contents
Copy raw contents
Copy raw contents
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Есть ли в Python функция сокращения дробей?
Например, когда я вычисляю 98/42 я хочу получить 7/3 , Не 2.3333333 , есть ли функция для использования Python или Numpy ?
задан 09 июля ’13, 00:07
2 ответы
Наблюдения и советы этой статьи мы подготовили на основании опыта команды fractions модуль может это сделать
Рецепт закончился здесь для numpy gcd. Который вы могли бы затем использовать, чтобы разделить свою фракцию
ответ дан 23 мая ’17, 12:05

Спасибо! Работает отлично! Входное значение должно быть целым числом, не может быть с плавающей запятой. — ЛВЗ
@LWZ Вы должны иметь возможность использовать числа с плавающей запятой как другие дроби — Натан
Дополнение к ответу Джона:
Чтобы получить упрощенную дробь из десятичного числа (например, 2.0372856077554062)
Использование Fraction дает следующий результат:
Чтобы получить упрощенный ответ :

Спасибо, теперь я использую это по умолчанию: даже в простых случаях Fraction иногда не дает простых ответов (1.8 дает 8106479329266893/4503599627370496 вместо 9/5). — Энтони Лабарр
@AnthonyLabarre Это может выглядеть как «простой случай», но 1.8 не может быть точно выражено как двоичное число; т. е. целое число, деленное на степень 2. Следовательно, оно не может быть представлено точно как число с плавающей запятой. Обходной путь — использовать строку вместо числа с плавающей запятой: сравните Fraction(1.8) —> Fraction(8106479329266893, 4503599627370496) с Fraction(«1.8») —> Fraction(9, 5) . Обратите внимание, что знаменатель 4503599627370496 равен 2**52. — Стеф
Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками python python-2.7 numpy numerical fractions or задайте свой вопрос.
Напишите функцию которая сокращает дробь вида m n python

// PascalABC.NET 3.1, сборка 1200 от 13.03.2016
function gcd(a,b:integer):integer;
// Нахождение НОД
begin
while b<>0 do
begin
a:=a mod b;
var i:=b; b:=a; a:=i
end;
Result:=a
end;
procedure Shorter(var a,b:integer);
// «сокращатель» дроби
begin
var k:=gcd(a,b);
a:=a div k;
b:=b div k
end;
begin
var a,b:integer;
Writeln(‘Введите числитель и знаменатель дроби: ‘);
Read(a,b);
Write(a,’/’,b,’=’); Shorter(a,b); Writeln(a,’/’,b)
end.
Тестовое решение:
Введите числитель и знаменатель дроби:
25 15
25/15=5/3