作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这是我使用 Scheme 教授的入门编程类(class)中的个人挑战,但我对 Python 示例同样满意。
我已经在scheme中实现了模幂的二进制方法如下:
(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))))
这是必要的,因为 Chez Scheme 没有任何类似于 python 的 pow(base expo 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。我意识到 R' 的答案应该是 64,N' 应该是 81,但不明白如何使用欧几里德算法来求解得到这个答案。
最佳答案
扩展欧氏算法为:
(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
您可以在 my blog 阅读更多内容.
关于algorithm - 求解 RR' - NN' = 1 的欧几里得算法。使用蒙哥马利算法进行模幂运算以在 python 或 Petite Chez 方案中实现费马测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13337320/
我是一名优秀的程序员,十分优秀!