LiamGoodacre

Euler 3, JS and Clj

Jan 23rd, 2012
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // First attempt - errors on x<2
  2. // with 1 param
  3. var largestprimefactor = function (x) {
  4.   return (function recur(v, d) {
  5.     if (v === d) return v;
  6.     if (v % d === 0) return recur(v / d, d);
  7.     return recur(v, d + 1);
  8.   }(x, 2));
  9. };
  10. // with two params
  11. var largestprimefactor = function recur(x, d) {
  12.   if (v === d) return v;
  13.   if (v % d === 0) return recur(v / d, d);
  14.   return recur(v, d + 1);
  15. };
  16.  
  17. // Second attempt - Seems to work fine!
  18. var largestprimefactor = function (_num) {
  19.   var num = Math.abs(_num);
  20.   if (num < 2) return num;
  21.   return (function recur(v, d) {
  22.     if (v === d) return v;
  23.     if (v % d === 0) return recur(v / d, d);
  24.     if (d === 2) return recur(v, 3);
  25.     return recur(v, d + 2);
  26.   }(num, 2));
  27. };
  28.  
  29. ; Clojure version of second attempt
  30. (defn largestprimefactor [_num]
  31.   (let [num (Math/abs _num)]
  32.     (if (< num 2) num)
  33.     (loop [v num d 2]
  34.       (cond
  35.         (= v d) v
  36.         (= 0 (mod v d)) (recur (/ v d) d)
  37.         (= d 2) (recur v 3)
  38.         :else (recur v (+ 2 d))))))
Advertisement
Add Comment
Please, Sign In to add comment