project-euler/p77.lisp

17 lines
544 B
Common Lisp

(defun prime-sum-count (n primes)
(let ((primes-descending (reverse primes)))
(labels ((recurse (primes target)
(cond ((= target 0) 1)
((< target 0) 0)
((null primes) 0)
(t (+ (recurse primes (- target (first primes)))
(recurse (rest primes) target))))))
(recurse primes-descending n))))
(defun p77 (&key (ways 5000) (prime-count 1000))
(let ((primes (get-primes prime-count)))
(loop for n upfrom 1
for count = (prime-sum-count n primes)
until (> count ways)
finally (return n))))