欧几里德算法求解RR' - NN'= 1.利用蒙哥马利算法进行模幂运算,在python或Petite Chez方案中实现Fermat检验

时间:2012-11-12 01:30:09

标签: algorithm scheme modular exponentiation chez-scheme

这是我在使用Scheme教授的入门编程课程中的个人挑战,但我对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))))

这是必要的,因为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,但是不明白如何使用欧几里德算法来得到这个答案。

1 个答案:

答案 0 :(得分: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

您可以在my blog了解更多信息。