素数プログラミング
素数って算数の勉強では、かなりのキー項目だと思うんです。これから公約数、公倍数とか出てきた時に素数って使いますよね。小学2年生の息子が九九の宿題をやっていて、「掛けて12になる組み合わせってなに?」と聞かれたので、「あ、それはこれ以上分解出来ない数っていうのがあって、そこまで分解して組み合わせるんだけど」と説明したのですが、なんだかさっぱり分からないようで(笑)調べたら素数って小学5年で習うんですね。なんだ、まだまだかと思い、今勉強中のPythonの練習がてらに素数プログラミングを作ってみました。
まずC#で作ったものがこちらです。
using System;
using System.Diagnostics;
namespace SosuuSample
{
class Program
{
static void Main(string[] args)
{
var sw = new Stopwatch();
sw.Start();
for (int num = 2; num <= 50000; num++)
{
Boolean isSosuu = true;
for(int div_num = 2 ; div_num < num; div_num++)
{
if (num % div_num == 0)
{
isSosuu = false;
break;
}
}
if(isSosuu == true)
{
Console.WriteLine(num);
}
}
sw.Stop();
TimeSpan span = sw.Elapsed;
Console.WriteLine(span.TotalSeconds);
}
}
}
次にPythonがこちら
import time
startTime = time.time()
for num in range (2, 50000):
isSosuu = True
for divNum in range(2, num-1):
if (num % divNum == 0):
isSosuu = False
break
if (isSosuu == True):
print(num)
endTime = time.time()
elapsedTime = endTime - startTime
print(elapsedTime)
多分、これで同じなはずです。両方ともvisual studioのプロジェクトを作って作成しました。時間が書いてあるのは、ちょっとC#とPythonで処理時間を計測してみようかと。50000までの数の素数を表示するプログラムです。実行してみます。まずはPythonから。
28.7秒ということです。では、次にC#。
速い!3.4秒。圧倒的ですね。Pythonがスクリプト言語だから、こうゆう処理だからか、私には分かりませんが、素数プログラミンではC#の圧勝ということで。
ところで、素数の出現というのは、規則性がなく数学者を悩ませる数なんだそうです。しかし、オイラーという数学者がどうも素数がπ(パイ)に関係がありそうという事まで突き止めたそうです。私は数学はあまり出来ないですが、直感で素数って絶対大事って思うのでπと関係があるなんて、なんだか不思議で素敵ですね。