Project Euler Problem 7

問題7: 10001 番目の素数を求めよ。[=>原文和訳]

問題7の解答

(defun problem007 (N)
  "N番目の素数を取得"
  (let ((primes-list '(2))
        (n 1) (count (1- N)))
    (while (> count 0)
      (incf n 2)
      (let ((p 0))
        (dolist (p primes-list)
          (when (< (floor (sqrt n)) p)
            (setq primes-list
                  (append primes-list
                          (list n)))
            (decf count)
            (return))
          (if (zerop (% n p))
              (return)))))
    n))

(problem007 10001)

 10001番目の素数がいったい何桁なのか想像もつかないのでエラトステネスのふるいは使わず、素数リストを育てる形で目的の素数を取得します。素数リストにあらかじめ 2 を入れておくことで以降のチェックは奇数だけでよくなります。
 これ計算するのに Emacs Lispだと13秒もかかります。