Algorithm 模逆算法

Algorithm 模逆算法,algorithm,scheme,Algorithm,Scheme,可能重复: 我已经编写了一个代码,用于查找并将x和y作为一对求解。 我需要写一个模逆代码,用ax+by=1求e模n的乘法逆 大宗报价 编辑:使用下面的函数解决问题 大宗报价 考虑这使用扩展的欧几里德算法来寻找模逆: (define (inverse x m) (let loop ((x x) (b m) (a 0) (u 1)) (if (zero? x) (if (= b 1) (modulo a m) (error 'inverse "mus

可能重复:

我已经编写了一个代码,用于查找并将x和y作为一对求解。 我需要写一个模逆代码,用ax+by=1求e模n的乘法逆

大宗报价

编辑:使用下面的函数解决问题

大宗报价


考虑

这使用扩展的欧几里德算法来寻找模逆:

(define (inverse x m)
  (let loop ((x x) (b m) (a 0) (u 1))
    (if (zero? x)
        (if (= b 1) (modulo a m)
          (error 'inverse "must be coprime"))
        (let* ((q (quotient b x)))
          (loop (modulo b x) x u (- a (* u q)))))))

他们做了同样的事情,但我对这个计划还不熟悉。在确认的答案中,我不知道他们是如何做到这一点的。在进一步研究之后,我给出的链接中的“egcd”是一个与我的“ax+by=1”等价的过程,但我仍然不知道这句话的逻辑让值g x y egcd a m`.@Dr.Oz让值绑定到多个变量计算返回多个值的过程的结果,在本例中为egcd
 (define inverse-mod (lambda (a m) 
                  (if (not (= 1 (gcd a m)))
                      (display "**Error** No inverse exists.")
                      (if (> 0(car (ax+by=1 a m)))
                          (+ (car (ax+by=1 a m)) m)
                          (car (ax+by=1 a m))))))
(define (inverse x m)
  (let loop ((x x) (b m) (a 0) (u 1))
    (if (zero? x)
        (if (= b 1) (modulo a m)
          (error 'inverse "must be coprime"))
        (let* ((q (quotient b x)))
          (loop (modulo b x) x u (- a (* u q)))))))