Login
7 branches 0 tags
Ben (X13/Arch) Simplified things a little 0643405 9 days ago 1260 Commits
nujel / tests / slow / euler003.nuj
#!/usr/bin/env nujel
;; Prime factorization
;; https://projecteuler.net/problem=3
;;
;; Find the largest prime factor of 600851475143

(defn prime? (v)
      (def mv v)
      (def i 2)
      (while (< i mv)
             (when (zero? (rem v i))
                   (return #f))
             (set! i (add/int i 1)))
      (return #t))

(defn prime-factors (v)
      (def factors #nil)
      (def mv (+ 1 (div/int v 2)))
      (def i 2)
      (while (<= i mv)
             (when (prime? i)
                   (while (zero? (rem v i))
                          (set! v (div/int v i))
                          (set! mv (+ 1 v))
                          (set! factors (cons i factors))))
             (inc! i))
      (return factors))

(defn largest-prime-factor (v)
      (car (prime-factors v)))

(def ret (largest-prime-factor 600851475143))
(when (not= ret 6857)
      (throw (list :wrong-result "Wrong result" ret)))

(return :success)