【发布时间】:2012-10-27 01:37:15
【问题描述】:
我已经编写了模 m 的乘法逆的代码。它适用于大多数初始情况,但不适用于某些情况。代码如下:
(define (inverse x m)
(let loop ((x (modulo x m)) (a 1))
(cond ((zero? x) #f) ((= x 1) a)
(else (let ((q (- (quotient m x))))
(loop (+ m (* q x)) (modulo (* q a) m)))))))
例如,它给出了正确的值 (inverse 5 11) -> 9 (inverse 9 11) -> 5 (inverse 7 11) -> 8 (inverse 8 12) -> #f 但是当我给出 (inverse 5 12) 它产生 #f 而它应该是 5。你能看到错误在哪里吗?
感谢您的帮助。
【问题讨论】:
-
你用的是什么算法?
-
我很难找到那里提供的算法与您的代码之间的对应关系。它使用 p 和 q 并没有帮助,而您使用 x 和 m(以及与它们的 q 不对应的 q)。
标签: scheme