欧几里得算法解决 RR' - NN' = 1. 使用蒙哥马利算法进行模幂运算以在 python 或 Petite Chez 方案中实现费马检验

Posted

技术标签:

【中文标题】欧几里得算法解决 RR\' - NN\' = 1. 使用蒙哥马利算法进行模幂运算以在 python 或 Petite Chez 方案中实现费马检验【英文标题】:Euclidean algorithm to solve RR' - NN' = 1. Modular exponentiation with Montgomery algorithm to implement Fermat test in python or Petite Chez scheme欧几里得算法解决 RR' - NN' = 1. 使用蒙哥马利算法进行模幂运算以在 python 或 Petite Chez 方案中实现费马检验 【发布时间】:2012-10-31 11:59:00 【问题描述】:

这是我在使用 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】:

扩展欧几里得算法是:

(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阅读更多内容。

【讨论】:

以上是关于欧几里得算法解决 RR' - NN' = 1. 使用蒙哥马利算法进行模幂运算以在 python 或 Petite Chez 方案中实现费马检验的主要内容,如果未能解决你的问题,请参考以下文章

matlab中NN输入的坐标归一化

2018/7/31 -zznu-oj -问题 C: 磨刀- 扩展欧几里得算法的基本应用

欧几里得及扩展欧几里得算法

欧几里得?x

扩展欧几里得算法详解

数学问题——拓展欧几里得算法