基本上这是一个家庭作业问题。我应该在 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
这似乎应该可行,但是当我尝试解决 7 644 mod 645 时,我得到的答案是 79,但正确的答案应该是 436。
如果有人能指出我的错误而不给我任何代码,我将非常感激。