17 lines
634 B
Common Lisp
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)))
|