- プログラミングのお題スレ Part6©2ch.net
231 :デフォルトの名無しさん[sage]:2015/01/04(日) 17:13:50.17 ID:kw9bqH4f - >>226は素数の二乗を誤って素数と判定していました。
誤 (> n (* i i)) 正 (>= n (* i i)) >>227 繰り返しを使わないように書き直してみました。 私の環境だと10585と11305の間でSEGVが発生してしまいました。 (require 'cl-lib) (defun hanrei (upto) (let (l) (cl-labels ((f (n) (when (<= n upto) (when (and (= (cl-labels ((f (i r) (if (<= i 0) r (f (1- i) (% (* r 2) n))))) (f n 1)) 2) (eq (when (= (% n 2) 1) (cl-labels ((f (i) (if (< n (* i i)) t (when (/= (% n i) 0) (f (+ i 2)))))) (f 3))) nil)) (push n l)) (f (1+ n))))) (f 3)) (reverse l))) (let ((max-lisp-eval-depth most-positive-fixnum) (max-specpdl-size most-positive-fixnum)) (hanrei 10703)) (341 561 645 1105 1387 1729 1905 2047 2465 2701 2821 3277 4033 4369 4371 4681 5461 6601 7957 8321 8481 8911 10261 10585) (let ((max-lisp-eval-depth most-positive-fixnum) (max-specpdl-size most-positive-fixnum)) (hanrei 11054)) Exception Type: EXC_BAD_ACCESS (SIGSEGV)
|