P41: goldbach conjecture その2
指定した範囲に対するgoldbach conjectureの結果を整形して表示。
goldbach-rangeは後の、条件を超える素数の組の数を求める問題のために分離しておいた。
;; P41 (defun goldbach-range (start end &optional (pred #'identity)) (remove-if #'(lambda (n) (cond ((null n)) ((not (funcall pred n))))) (mapcar #'goldbach (range start end)))) (defun goldbach-list (start end &optional (limit 1)) (dolist (n (goldbach-range start end #'(lambda (n) (< limit (car n))))) (destructuring-bind (p1 p2) n (format t "~s = ~s + ~s~%" (+ p1 p2) p1 p2)))) (goldbach-list 1 2000 50) ;; => nil
表示するので当然評価結果はnilに…。
P41に来て初めて表示使ったな。
1〜2000の範囲で素数の組の内小さい素数が50を超えるケースは以下の通り。
CL-USER> (goldbach-list 1 2000 50) 992 = 73 + 919 1382 = 61 + 1321 1856 = 67 + 1789 1928 = 61 + 1867 NIL CL-USER>
1〜3000の範囲で、素数の組の内小さい素数が50を超える偶数の数は9つ。
(length (goldbach-range 1 3000 #'(lambda (n) (< 50 (car n))))) ;; => 9 (#x9, #o11, #b1001)