長整數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