Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 23.11.2019
Сообщений: 71

Алгоритм Евклида (упрощенная версия)

23.11.2019, 20:19. Показов 5246. Ответов 17

Студворк — интернет-сервис помощи студентам
Решите задачу одним циклом while, допускается применение условных операторов.

Наибольшим общим делителем (НОД) двух целых чисел a и b называется наибольший из их общих делителей. Например, для чисел 70 и 105 наибольший общий делитель равен 35.

С давних времен известен следующий алгоритм нахождения наибольшего общего делителя двух неотрицательных целых чисел: пока оба числа строго положительны надо из большего числа вычесть меньшее. Результатом работы (наибольшим общим делителем) является большее число после окончания описанной серии вычитаний или 0, если оба числа в конце равны 0.

Вам заданы целые неотрицательные числа a и b (0≤a,b≤107). Напишите программу, которая выведет количество вычитаний при работе такого алгоритма и результат его работы.

Входные данные
Единственная строка входных данных содержит записанные через пробел целые числа a, b (0≤a,b≤107).

Выходные данные
Выведите количество вычитаний в ходе работы алгоритма и результат его работы через пробел.

Пример
входные данные
70 105
выходные данные
3 35


Python
1
2
3
4
5
6
7
8
9
10
a, b=[int(x)for x in input(). split()]
x=0
while a != b:
    if a > b:
        a = a - b
        x=x+1
    else:
        b = b - a
        x=x+1
print(x+1, a)
Превышено ограничение времени на тесте 5 - не понимаю почему...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.11.2019, 20:19
Ответы с готовыми решениями:

Алгоритм Евклида
a = int(input('Введите а:')) b = int(input('Введите в:')) x0, x1, y0, y1 = 1, 0, 0, 1 if b>= a: a, b = b, a a0, a1 = a, b ...

Алгоритм Евклида
Прошу помощи с задачкой! Заранее спасибо. Ввести с клавиатуры два натуральных числа и сравнить количество шагов цикла для...

Модифицированный алгоритм Евклида
2.Напишите программу, использующую модифицированный алгоритм Евклида: нужно заменять большее число на остаток от деления большего на...

17
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
23.11.2019, 21:18
Цитата Сообщение от CDRV Посмотреть сообщение
0≤a,b≤107
107 или 107 ?
0
0 / 0 / 0
Регистрация: 23.11.2019
Сообщений: 71
24.11.2019, 08:25  [ТС]
107
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
24.11.2019, 09:44
во первых вы не учитываете 0
при вводе 0 100 у ваша программа зациклится.
во вторых тут нужен другой алгоритм Евклида использовать (деления с остатком)
если ввести 1 10000000 ваша программа выполнит 10 миллионов раз тело цикла, хотя можно подсчитать всего за 3.
0
0 / 0 / 0
Регистрация: 23.11.2019
Сообщений: 71
24.11.2019, 15:22  [ТС]
Ну и как программу то написать?
0
Эксперт Python
1356 / 653 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
24.11.2019, 18:35
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
def gcd(a, b):
    while a != b:
        if a > b:
            a = a - b
        else:
            b = b - a
    print(a)
 
 
if __name__ == '__main__':
    a = int(input())
    b = int(input())
    gcd(a, b)
0
0 / 0 / 0
Регистрация: 23.11.2019
Сообщений: 71
24.11.2019, 20:42  [ТС]
Количество вычитаний при работе еще найти надо
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
25.11.2019, 05:11
Цитата Сообщение от CDRV Посмотреть сообщение
Количество вычитаний при работе еще найти надо
Добавьте счетчик и считайте количество циклов.
0
0 / 0 / 0
Регистрация: 23.11.2019
Сообщений: 71
25.11.2019, 19:28  [ТС]
А как этот счетчик добавить, а то я такую форму написания программы ещё пока не знаю.
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
25.11.2019, 22:00
CDRV, перед циклом while инициируете счетчик со значением 0
Python
1
count = 0
На каждом шаге цикла, в конце его прибавляете к счетчику 1
Python
1
count += 1
При выходе из цикла выводите на печать значение счетчика.
Если хотите это значение использовать за пределами функции, то возвращаете его из функции с помощью return
0
0 / 0 / 0
Регистрация: 23.11.2019
Сообщений: 71
26.11.2019, 21:11  [ТС]
Программа выдаёт ошибку, а также нет счетчика вычитаний!!!
0
 Аватар для codcw
815 / 527 / 214
Регистрация: 22.12.2017
Сообщений: 1,495
26.11.2019, 21:42
CDRV, только-что проверил
Python
1
2
3
4
70
105
35
>>>
никакой ошибки нет, счётчик добавьте сами, вам же уже объяснили как это сделать

Добавлено через 1 минуту
единственное что будет ошибка при вводе в одну строку, но тут вам просто нужно заменить метод ввода на тот что использовался в вашем коде
0
0 / 0 / 0
Регистрация: 23.11.2019
Сообщений: 71
01.12.2019, 09:22  [ТС]
Опять превышено ограничение по времени!
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
01.12.2019, 09:42
я Вам еще в посте #4 описал как это сделать. Не вижу ни одной Вашей попытки. Или за Вас написать?
0
0 / 0 / 0
Регистрация: 23.11.2019
Сообщений: 71
01.12.2019, 09:52  [ТС]
Вы понимаете, что нужно использовать вычитания по условию, а не деление с остатком.
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
01.12.2019, 09:59
Цитата Сообщение от CDRV Посмотреть сообщение
использовать вычитания по условию
этого нигде не сказано.
Цитата Сообщение от CDRV Посмотреть сообщение
Решите задачу одним циклом while, допускается применение условных операторов.
в программе будет только один while, условных операторов можно избежать вообще.
0
0 / 0 / 0
Регистрация: 23.11.2019
Сообщений: 71
01.12.2019, 10:01  [ТС]
Ладно, тогда какая будет программа, я уже запуталась
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
01.12.2019, 11:36
Python
1
2
3
4
5
6
a, b = map(int, input().split())
k = 0
while b:
    k += a//b
    a, b = b, a % b
print(k, a)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.12.2019, 11:36
Помогаю со студенческими работами здесь

Python алгоритм Евклида задан соотношением
Создать функцию, где алгоритм Евклида задан соотношением, найти НОД, вот не могу разобраться как это сделать, прошу помочь!

Реализовать алгоритм Евклида с использованием рекурсивной функции
Реализовать алгоритм Евклида с помощью рекурсивной функции

Используя алгоритм Евклида, найти наибольший общий делитель n и m
Работает неправильно. Не понимаю где ошибка import math print("Задание 88(g) ") n = input("Введите число n ") n = int(n)...

Алгоритм Евклида для вычисления наибольшего общего делителя трёх натуральных чисел
def gcd(a,b): if (b > a): return gcd(b,a) r=a%b if (r==0): return b else: return...

Алгоритм Евклида для вычисления наибольшего общего делителя двух натуральных чисел
1.Алгоритм Евклида для вычисления наибольшего общего делителя двух натуральных чисел, формулируется так: нужно заменять большее число на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Программный отбор элементов справочника Номенклатура по группе 1С
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор под наименованию группы (на. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор элементов справочника Сотрудники по перечислениям 1С
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru