これらのプログラムでは、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;
}