0 / 0 / 0
Регистрация: 23.11.2019
Сообщений: 71

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

23.11.2019, 20:19. Показов 5265. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru