长整数m = 38941629971148227236N。我想生成1 <和< m之间的数字e,并检查e是否满足以下要求:gcd(e,m)= 1。我的方法是使用(长(RAND M))随机生成E,我得到了一个警告:如何在clojure中随机生成一个长整数
IllegalArgumentException Value out of range for long:
1.7166121075068025E19 clojure.lang.RT.longCast (RT.java:1254)
我的代码是:
(defn find-e [m]
(loop [e (long (rand m))]
(if (= 1 (gcd e m)) e
(recur (long (rand m))))))
我知道结果超出范围长,但我不知道有什么办法可以解决这个问题吗?
真的很好的答案。对于大限制,重试次数不应该成为问题。 – muhuk
其实我错了,它可能是一个问题,因为每一位都会使搜索空间加倍。而越大的“极限”越大,它变得越糟糕。 – muhuk