有了之前进制转换和字符串的坑这次写起来挺顺的233
先贴一下模重复平方法的数学实现,一个很明显的递推。
我觉得编程实现递推关系的时候,是可以无视其数学意义和数学关系(比如这个位置到底是aj还是aj+1并不重要),只看这个数和上一个数之间的数量关系就好了。
如果说哪里要注意一下大概是最后的边界吧,判断是否到达二进制数的末尾,用len(n)来返回长度判断。第一次用了if i!=n[-1] 显然有问题,因为n这个字符串不是0就是1
实现代码:
def test(m, n, e):
n = bin(int(n))
n = n.replace('0b', '')
n = n[::-1]
a = [1]
b = [int(e)]
m = int(m)
cum = 0
for i in n:
if int(i) > 0:
a.append(a[cum]*b[cum] % m)
else:
a.append(a[cum] % m)
if cum < len(n):
b.append(b[cum] * b[cum] % m)
cum = cum + 1
print(a