古典、漢文を学ぶ意味がわからない文系学生のための素数
まず、文系学生のための説明なので、素数とは何か?というところから入ります。 私がエラトステネスのアルゴリズムを使って作ったプログラムの実行ファイルはこちらです。 さて、ここからが重要な話になります。 さて、いよいよ本題に入ります。 Copyright(c) 2004 - 2021 Tetsuo Arita. All rights reserved.
素数の定義を簡単に言うと、他の素数で割り切ることが出来ない整数のことです。
1は素数ではありません。(これは素数の定義です。あまり気にする必要はありません。)
2は素数です。(これも素数の定義です。あまり気にする必要はありません。)
3は素数です。(3より小さな素数、2で割り切ることができない。)
4は素数ではありません。(2で割り切ることが出来る。)
5は素数です。(2でも3でも割り切ることができない。)
6は素数ではありません。(2と3で割り切ることが出来る。)
7は素数です。(2でも3でも5でも割り切ることができない。)
8は素数ではありません。(2と4で割り切ることが出来る。)
9は素数ではありません。(3で割り切ることが出来る。)
10は素数ではありません。(2と5で割り切ることが出来る。)
11は素数です。(2でも3でも5でも7でも割り切ることができない。)
…
と延々と続きます。
次の素数を求めるプログラムを私は36歳のときに作りました。
さて、これを実行してみましょう。
実行結果はこちらです。
1000万個目の素数179424673が、素数か素数じゃないか調べるために2分14秒掛かりました。
では次に「エラトステネスのふるい」を使ったプログラムです。
プログラムのソースコードは「エラトステネスのふるい ソースコード」で検索すれば沢山出てくるので割愛します。
さて、これを実行してみましょう。
実行結果はこちらです。
1000万個目の素数179424673を求めるために、なんとわずか4秒で求めることが出来ました。
私が作ったプログラムの実に33倍もの高速計算です。
これは同じコンピュータを使って実行した結果なので、コンピュータの性能の差によるものではありません。
エラトステネスのふるいのアルゴリズムの処理効率がとても良いことを示しています。
わかりやすく言うと1000万個の素数を求めるために行った計算量が私のプログラムの1/33の計算量で済んでいるということです。
逆を言えば私のプログラムはエラトステネスの33倍もの無駄な計算をしているヘボいプログラムだということです。
そしてウィキペディアには記載されていませんが、以前どこかで読んだ記述によるとエラトステネスが「エラトステネスのふるい」を発明したのは20代の頃だと言われています。
2004年に36歳の私が頑張って作ったプログラムより33倍も効率の良いアルゴリズムを2200年以上も昔の20代の若者が考案していたのです。
驚きに値するのはそれだけではありません。
2200年以上もの長い年月の間、途切れることなく、エラトステネスのアルゴリズムとその功績が記録として残り、語り継がれていることです。
そのおかげで、当時では不可能だった1億個の素数ですら、現在では、ほんのわずかな時間で求めることが出来ます。
これはエラトステネスが素晴らしい人だったということはもちろんありますが、その功績を記録に残し、語り継いで来た人達の功績を忘れてはなりません。
1000年前の人からすれば、1200年も昔の古文を読んで語り継いで来たということです。
昔の偉人の知恵を語り継ぐには、古文、漢文がどうしても必要なのです。
未だ現代語に訳されていない古文、漢文は山のようにあります。
その中には現代人が知らないことがきっと沢山隠されています。
それを発見出来たら素晴らしいことだと思いませんか?
そう思ったら、ちょっぴり古文、漢文を頑張ってみようかなって気になったでしょ?