По сути, это вопрос домашнего задания. Я должен реализовать эти два алгоритма псевдокода в Python3. Я делаю что-то не так и не могу понять, что (кажется, это должно быть просто, поэтому я не уверен, что/где я напортачил. Это может быть мой алгоритм или отсутствие опыта работы с Python. Я' м не уверен, какой.).
Пожалуйста, скажите мне, что я сделал неправильно, не публикуйте код. Если я получу код ответа, меня обвинят в плагиате (чего я очень не хочу).
Первый алгоритм (расширение базы):
procedure base expansion(n, b: positive integers with b > 1)
q := n
k := 0
while q ≠ 0
ak := q mod b
q := q div b
k := k + 1
return (ak-1, ... , a1, a0) {(ak-1 ... a1 a0)b is the base b expansion of n}
второй алгоритм (модульное расширение):
procedure modular exponentiation(b: integer, n = (ak-1ak-2...a1a0)2, m: positive integers)
x := 1
power := b mod m
for i := 0 to k - 1
if ai = 1 then x := (x * power) mod m
power := (power * power) mod m
return x {x equals bn mod m}
В любом случае кажется достаточно простым, вот что я реализовал на Python3 (и я прошу прощения у всех программистов на Python, это очень новый язык для меня)
def baseExp(n, b):
q = n
a = []
while (q != 0):
a.append(q % b)
q = q // b
pass
return a
def modularExp(b, n, m):
a = baseExp(n, b)
x = 1
power = b % m
for i in range(0, len(a)):
if (a[i] == 1):
x = (x * power) % m
pass
power = (power * power) % m
pass
return x
Кажется, это должно работать, но когда я пытаюсь решить 7644 mod 645, я получаю ответ 79, но правильный ответ должен быть 436.
Если бы кто-нибудь мог указать на мои ошибки, не давая мне никакого кода, я был бы очень признателен.