Находить наибольший общий делитель двух чисел, используя модифицированный алгоритм Евклида: нужно заменять большее число на остаток от деления большего на меньшее до тех пор , пока этот остаток не станет равен нулю: тогда второе и есть НОД
комментировать
в избранное
vdtes t [30.5K]
более года назад
Программа на Python для вычисления НОД должна сначала ввести список из двух чисел, разделённых пробелом (или запятой или каким-нибудь другим разделителем, указанным в split)
Алгоритм вычисления НОД :
- ввод списка из двух чисел через пробел
- циклически пока одно из чисел не станет равным нулю выполняются шаги 3 и 4
- если первое число меньше второго числа меняются местами
- первое число вычисляется как остаток от деления первого числа на второе
Составляем текст программы
# n — исходные числа
n=list(map(int, input(‘Введите 2 числа через пробел:’).split(» «)))
while n[ 0 ]!= 0 and n[ 1 ]!=0:
~~~~~~~~h=n[ 0 ] #меняем местами (если первое число меньше второго)
Алгоритм Евклида Python
~~~~~~~~n[ 0 ]=n[ 1 ]
~~~~~~~~n[ 1 ]=h
~~~~n[ 0 ] = n[ 0 ]%n[ 1 ] #вычисляем первое число
print(f»НОД равен «)# Если одно из чисел 0 то сумма равна другому числу т.е. НОД
Заменив символ ~ на пробел получим
Источник: www.bolshoyvopros.ru
Русские Блоги
Расширенный алгоритм Евклида может использоваться для решения обратного элемента по модулю b, а решение обратного элемента является обязательным шагом в алгоритме шифрования RSA.
Сам алгоритм не сложен, его легко реализовать на python по псевдокоду.
Псевдокод выглядит следующим образом:
Реализация Python следующая (рекурсивное решение):
A=[0,1] N=[1,0] A.append(int(input(‘Please input a:’))) N.append(int(input(‘Please input n:’))) def Extended_Euclid(a,n): if a[2]==0: print (‘Нет обратного элемента, gcd (% d,% d) =% d’% (a [2], n [2])) elif a[2]==1: print (‘gcd (a, n) = обратное% d na:% d’% (a [2], a [1])) else: Q=n[2]//a[2] t1,t2,t3=[(n[0]-Q*a[0]),(n[1]-Q*a[1]),(n[2]-Q*a[2])] Extended_Euclid([t1,t2,t3],[a[0],a[1],a[2]]) solution=Extended_Euclid(A,N)
Источник: russianblogs.com
Программа для расширенного евклидова алгоритма с использованием Python
Задача состоит в том, чтобы найти НОД двух чисел с помощью расширенного алгоритма Евклида.
суррогатного материнства
def find(num1, num2): если num1 == 0 : вернуть num2, 0, 1 вывод, n, m = найти(num2 % num1, num1) n1 = m — ( num2//num1 ) * n m1 = n вернуть output,n1,m1 num1 = int(input(«Введите первое число: «)) num2 = int(input(«Введите второе число: «)) output, n1, m1 = find(num1, num2) print(» НОД(,) равен «.format(num1, num2, output))
Результат
20 Цикл while Алгоритм Евклида Python
объяснение
Расширенный алгоритм Евклида: an + bm = GCD(a,b), где n и m — целые коэффициенты.
Функция find() рекурсивно вызывается для обновления значения НОД, где m1 и n1 обновляются выражением:
n1 = m — (число2//число1) * n m1 = n
Автор
Full Stack Developer с более чем 10-летним опытом создания технического контента. Посмотреть все сообщения
Источник: gocoding.org