application/octet-stream
•
936 B
•
36 lines
#!/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)