2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |
2007-03-29
L-99 (40)
L-99 40問目に挑戦 - L-99:Ninety-Nine Lisp Problems
P40
解答 ;;; Common Lisp ;; prog版 (LOAD "./is-prime") (LOAD "./next-prime") (DEFUN GOLDBACH (N) (AND (EVENP N) (> N 3) (PROG (I J) (SETQ I 2) L (SETQ J (- N I)) (AND (IS-PRIME J) (RETURN-FROM GOLDBACH `(,I ,J))) (SETQ I (NEXT-PRIME I)) (GO L)))) ;; 突如On Lispの非決定性の章のchoose-bindを使ってみた版 (defun goldbach/amb (n) (choose-bind x (prime-list 2 (floor n 2)) (if (is-prime (- n x)) `(,x ,(- n x)) (fail)))) ;;; Scheme (load "./is-prime") (load "./next-prime") ;; 折角なので、前回のprime-listを使ってみた版 (define goldbach (lambda (n) (if (even? n) (let ((plist (prime-list 3 (/ n 2)))) (let/cc return (for-each (lambda (i) (and-let* ((j (- n i)) ((is-prime j))) (return `(,i ,j)))) plist))) #f))) ;; Common Lispのprog版をそのまま訳した版 (define (goldbach n) (and (even? n) (> n 3) (let loop ((i 2)) (let ((j (- n i))) (if (is-prime j) `(,i ,j) (loop (next-prime i)))))))
「6以上の任意の偶数は、二つの奇素数の和で表すこと
ができる」というのが、ゴルドバッハ予想らしい。
ということで、任意の偶数を素数+素数という形式に分
解する関数を作成。
コメントを書く