Algorithm 模逆算法
可能重复: 我已经编写了一个代码,用于查找并将x和y作为一对求解。 我需要写一个模逆代码,用ax+by=1求e模n的乘法逆 大宗报价 编辑:使用下面的函数解决问题 大宗报价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
考虑这使用扩展的欧几里德算法来寻找模逆:
(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)))))))