Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // First attempt - errors on x<2
- // with 1 param
- var largestprimefactor = function (x) {
- return (function recur(v, d) {
- if (v === d) return v;
- if (v % d === 0) return recur(v / d, d);
- return recur(v, d + 1);
- }(x, 2));
- };
- // with two params
- var largestprimefactor = function recur(x, d) {
- if (v === d) return v;
- if (v % d === 0) return recur(v / d, d);
- return recur(v, d + 1);
- };
- // Second attempt - Seems to work fine!
- var largestprimefactor = function (_num) {
- var num = Math.abs(_num);
- if (num < 2) return num;
- return (function recur(v, d) {
- if (v === d) return v;
- if (v % d === 0) return recur(v / d, d);
- if (d === 2) return recur(v, 3);
- return recur(v, d + 2);
- }(num, 2));
- };
- ; Clojure version of second attempt
- (defn largestprimefactor [_num]
- (let [num (Math/abs _num)]
- (if (< num 2) num)
- (loop [v num d 2]
- (cond
- (= v d) v
- (= 0 (mod v d)) (recur (/ v d) d)
- (= d 2) (recur v 3)
- :else (recur v (+ 2 d))))))
Advertisement
Add Comment
Please, Sign In to add comment