How to generate a long number randomly in clojure

Viewed 433

There is long integer number m = 38941629971148227236N. I want to generate a number e between 1 < e < m, and check e if satisfy this requirement: gcd(e,m)=1. My method is to use (long (rand m)) to generate e randomly, I got a warning:

IllegalArgumentException Value out of range for long:
1.7166121075068025E19  clojure.lang.RT.longCast (RT.java:1254) 

My code is:

(defn find-e [m]
(loop [e (long (rand m))]
    (if (= 1 (gcd e m)) e
        (recur (long (rand m))))))

I know the result out of range for long, but I don't know is there any way to solve this problem?

2 Answers
Related