【发布时间】:2014-10-13 06:10:43
【问题描述】:
您好,我正在用 clojure 编程,虽然模逆问题与语言无关,但我被困在这段代码中 -
(defn EulerDiv [x p]
(let [ToMod (+ p 2)]
(loop [num 1 toPow (int p) numDouble x]
(if (= 0 toPow)
num
(let [numDouble2 (rem (* numDouble numDouble) ToMod)
halfToPow (int (/ toPow 2))]
(if (odd? toPow)
(recur (rem (* num numDouble) ToMod)
halfToPow
numDouble2)
(recur num halfToPow numDouble2))
))))
)
对于小质数,它似乎给了我正确的答案,但是当我在更大质数的问题中使用它时,我得到的答案不是结果,例如:
(= 2 (mod (* 4 (EulerDiv 2 (- 3 2))) 3))
这是真的
(def ToMod (+ 10e8 7))
( = 1 (int (mod (* 2 (EulerDiv 2 (- ToMod 2))) ToMod)) )
这打印错误。
clojure 中还有rem 和mod。
mod 使输出为正,因此我不能在计算之间使用它。
这是一场编程竞赛,但这只是解决方案的一部分,并且在问题页面中也提供了模逆的信息。
问题在于编程计算器语法以评估诸如4/-2/(2 + 8)之类的evpressions
【问题讨论】:
-
我的程序只要有
/就会给出错误的答案。这是我使用模逆的地方