算数

素数プログラミング

素数って算数の勉強では、かなりのキー項目だと思うんです。これから公約数、公倍数とか出てきた時に素数って使いますよね。小学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#の圧勝ということで。

ところで、素数の出現というのは、規則性がなく数学者を悩ませる数なんだそうです。しかし、オイラーという数学者がどうも素数がπ(パイ)に関係がありそうという事まで突き止めたそうです。私は数学はあまり出来ないですが、直感で素数って絶対大事って思うのでπと関係があるなんて、なんだか不思議で素敵ですね。

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

PAGE TOP