RosettaCodeData/Task/Pythagorean-triples/Common-Lisp/pythagorean-triples-1.lisp
2019-09-12 10:33:56 -07:00

17 lines
634 B
Common Lisp

(defun mmul (a b)
(loop for x in a collect
(loop for y in x
for z in b sum (* y z))))
(defun count-tri (lim &aux (prim 0) (cnt 0))
(labels ((count1 (tr &aux (peri (reduce #'+ tr)))
(when (<= peri lim)
(incf prim)
(incf cnt (truncate lim peri))
(count1 (mmul '(( 1 -2 2) ( 2 -1 2) ( 2 -2 3)) tr))
(count1 (mmul '(( 1 2 2) ( 2 1 2) ( 2 2 3)) tr))
(count1 (mmul '((-1 2 2) (-2 1 2) (-2 2 3)) tr)))))
(count1 '(3 4 5))
(format t "~a: ~a prim, ~a all~%" lim prim cnt)))
(loop for p from 2 do (count-tri (expt 10 p)))