application/octet-stream
•
806 B
•
30 lines
#!/usr/bin/env nujel
; Prime factorization
; https://projecteuler.net/problem=3
;
; Find the largest prime factor of 600851475143
[defn prime? [v]
[for [i 2 [int v]]
[when [zero? [% v i]] [return #f]]]
[return #t]]
[defn prime-factors [v]
[def factors #nil]
[def mv [+ 1 [int [/ v 2]]]]
[def i 2]
[while [<= i mv]
[when [prime? i]
[while [zero? [% v i]]
[set! v [/ v i]]
[set! mv [+ 1 [int v]]]
[set! factors [cons i factors]]]]
[++ i]]
[return factors]]
[defn largest-prime-factor [v]
[car [prime-factors v]]]
[def ret [largest-prime-factor 600851475143]]
[when [!= ret 6857]
[throw [list :wrong-result "Wrong result" ret]]]