これらのプログラムでは、1から順番に素数の数を数えた。けれども、遅延評価を使ったエラトステネスの篩の方が良いかもしれない。
Scheme
(use srfi-1) (define (prime? n) (if (= n 1) #f (let loop ((d 2)) (cond ((> (* d d) n) #t) ((zero? (modulo n d)) #f) (else (loop (+ d 1))))))) (define (p007) (let loop ((x 1) (c 0)) (cond ((= c 10001) (print (- x 1))) ((prime? x) (loop (+ x 1) (+ c 1))) (else (loop (+ x 1) c))))) (p007)
C++
#include <cstdio> bool is_prime(int n) { if (n == 1) return false; for (int i = 2; i*i <= n; i++) if (n%i == 0) return false; return true; } int main() { int x, c; x = 1, c = 0; for (;;) { if (is_prime(x) && ++c == 10001) break; x++; } printf("%d\n", x); return 0; }