書籍「教養としての「数学Ⅰ・A」」を読む(その9)
マガジンリスト > 書籍「教養としての「数学Ⅰ・A」」を読む > その9
整数はアルゴリズムの土台になっている
上記の「教養としての「数学I・A」」を読み進めています。
今回は、最後の章「第8章 千年の謎をまとう数 整数の性質」を読みました。
『コンピュータを効果的に使いこなすためには、アルゴリズムに関する知識が必要になってきます』というところに目が留まりました。
確かに、現在のコンピュータ内で行う演算処理は全て 2 進数で行いますので、アルゴリズムの土台は整数の性質をきちんと理解することにつながりますね。整数の性質を学ぶ意義をあらためて感じました。
約数を探すためには
これは勉強になりました。
この note の記事『高校数学をプログラミングで解く(数学A編)「3-1 約数と倍数」』で以下のような整数$${N}$$以下の素数を求めるプログラム(ソースコード1)を作成しましたが、もう少し改良ができそうです。
// 整数N以下の素数を求める
void setup(){
// 整数N(ただし、Nは2以上)
int N;
N = 20;
println(2); // 最初の素数をコンソールに出力
boolean pn_flag; // 素数かどうかのフラグ
// 3以上N以下の整数について素数であるかを確認する
for(int n=3; n<=N; n+=2){
pn_flag = true;
for(int m=3; m<n; m+=2){
if( n%m == 0 ){ // mで割り切れたらnは素数でない
pn_flag = false;
break;
}
}
if(pn_flag){ // nが素数と判定されたらコンソールに出力
println(n);
}
}
}
ソースコード1 整数$${N}$$以下の素数を求めるプログラム
つまり、このソースコード1の
for(int m=3; m<n; m+=2){
の部分は、上記の条件から
for(int m=3; m<=sqrt(n); m+=2){
と改良することができるわけです。改良した結果、整数$${N}$$以下の素数を求めるプログラムを実行してみると、図1のように、コンソールに
2
3
5
7
11
13
17
19
と出力されます。
この例では、$${N=20}$$ですので、あまり大きな効果は期待できませんが、$${N}$$をもっと大きな整数にしたときは、その処理時間に今回の改良の効果が見えてくるのではないかと思います。
整数問題のアプローチ
これら5つの整数問題へのアプローチ方法をみていて、ふとプログラムのテスト技法を思い出しました。アルゴリズム設計知識を身につけることと整数の性質を理解することとはやはり切っても切り離せないことなのかもしれません。
素数と n 進法
$${n}$$進法での素数については以前から何となく気になっていたので、今回大変勉強になりました。
あと、こちらもなんとなくですが、整数が素数であるかどうかを考える際に、$${10}$$進法で考えるより、$${2}$$進法で考える方がやりやすいのではないかと思いました。
今回の話(第8章)は、「数学A」で学ぶ「整数の性質」のお話でした。整数の性質については、コンピュータ(アルゴリズム設計、プログラミングなど)と切っても切り離せないことだとあらためて実感しました。
なお、大学入試共通テストでは、数学Ⅰ・A の単元で「整数の性質」について扱わないそうです。「整数の性質」の内容がなくなったのではなく、「情報Ⅰ」で扱うようにするということではないかと推測します。
この note にまとめている記事(マガジン)『高校数学をプログラミングで解く(数学A編)3.整数の性質』では、この章で扱っている内容を実際にプログラミングしているものもあるので、合わせて読んでいただければと思います。
今回でこの書籍の紹介は終わりです。読んでいただいてありがとうございました。
MK's papa