素数の計算
フィボナッチ数の計算に引き続いて、100000以下の素数の個数を数える マクロで処理時間を計測してみました。
前回同様、マクロの起動時間のページに貼り付けてある MacroBenchプラグインを使用しました。
今回は、配列の処理と四則の演算が主となります。
使用したマクロのソースコードは以下の通りです。(*1)
prime.jsee
M = 100000;
primes = [2, 3];
for (n = 5; n < M; n += 2) {
for (i = 1; i < primes.length; i++) {
d = primes[i];
if (n % d == 0) {
break;
}
if (n < d * d) {
primes.push(n);
break;
}
}
}
Window.document.writeln(M + ": " + primes.length);
prime.plee
#language="PerlScript"
$M = 100000;
@primes = (2, 3);
for ($n = 5; $n < $M; $n += 2) {
for ($i = 1; $i < scalar(@primes); $i++) {
$d = $primes[$i];
if ($n % $d == 0) {
last;
}
if ($n < $d * $d) {
push(@primes, $n);
last;
}
}
}
$Window->document->writeln($M . ": " . scalar(@primes));
prime.pyee
#language="Python" M = 100000 primes = [2, 3] n = 5 while n < M: i = 1 while i < len(primes): d = primes[i] if n % d == 0: break if n < d * d: primes.append(n) break i += 1 n += 2 Window.document.writeln(str(M) + ": " + str(len(primes)))
実行結果は以下の通りでした。
| * | prime.jsee | prime.plee | prime.pyee |
| 1回目 | 5094 | 2594 | 5969 |
| 2回目 | 5000 | 1844 | 1953 |
| 3回目 | 4890 | 1859 | 1984 |
| 4回目 | 4891 | 1859 | 1969 |
| 5回目 | 4938 | 1860 | 1953 |
| 6回目 | 4906 | 1875 | 2000 |
| 7回目 | 4906 | 1859 | 1969 |
| 8回目 | 4922 | 1844 | 1953 |
| 9回目 | 4843 | 1875 | 1984 |
| 10回目 | 4735 | 1844 | 1953 |
文責: とらめ
