这是我使用方案教授的介绍性编程课中的个人挑战,但我对python的示例同样满意。
我已经在方案中实现了模块化指数的二进制方法:
(define (pow base expo modu)
(if (zero? expo)
1
(if (even? expo)
(mod (expt (pow base (/ expo 2) modu) 2) modu)
(mod (* base (pow base (sub1 expo) modu)) modu))))
这是必需的
现在,我正在尝试实施求解模块化乘法的蒙哥马利方法。例如,我有:
Trying to solve:
(a * b) % N
N = 79
a = 61
b = 5
R = 100
a' = (61 * 100) % 79 = 17
b' = (5 * 100) % 79 = 26
RR' - NN' = 1
我试图了解如何解决rr' - nn'= 1。得到这个答案。
扩展的欧几里得算法是:
(define (euclid x y)
(let loop ((a 1) (b 0) (g x) (u 0) (v 1) (w y))
(if (zero? w) (values a b g)
(let ((q (quotient g w)))
(loop u v w (- a (* q u)) (- b (* q v)) (- g (* q w)))))))
因此,在您的示例中,
> (euclid 79 100)
19
-15
1
您可以在我的博客上阅读更多。