素数の計算
フィボナッチ数の計算に引き続いて、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 |
文責: とらめ