Uzun tamsayı sayısı m = 38941629971148227236N. 1 < e < m arasında bir sayı üretmek istiyorum ve bu gerekliliği yerine getirip getirmediğini kontrol etmek istiyorum: gcd (e, m) = 1. Ben uzun süre aralığının dışında sonucunu biliyoruzclojure içinde uzun bir sayı nasıl oluşturulur
(defn find-e [m]
(loop [e (long (rand m))]
(if (= 1 (gcd e m)) e
(recur (long (rand m))))))
:
IllegalArgumentException Value out of range for long:
1.7166121075068025E19 clojure.lang.RT.longCast (RT.java:1254)
Benim kodudur: Benim yöntemim bir uyarı var, rastgele e oluşturmak için (uzun (Rand m)) kullanmaktır ama bilmiyorum, bu sorunu çözmenin bir yolu var mı?
Gerçekten iyi cevap. Büyük sınırlar için, yeniden denemelerin sayısı bir sorun olmamalıdır. – muhuk
Aslında yanılıyordum, her bit, arama alanını ikiye katlıyor gibi bir sorun olabilir. Ve daha büyük olan 'limit' olur, daha kötüsü olur. – muhuk