#!/bin/bash echo あなたが入れた数値を素因数分解するプログラムのはじまりはじまり。 #素因数分解するこのプログラムの説明をユーザーに表示する。 echo ※ 素数とは、1とその数以外に約数がない正の整数である! #素数に1が含まれないこと、また素数の定義をユーザーと共有するための内容を表示する。 q2=quiz2.txt #結果の出力先ファイルquiz2.txtを変数q2に先に読み込ませておく。 echo What is your number? #ユーザーに素因数分解をする値を打ち込んでもらうために、疑問文を表示する。 read a #ユーザーが打ち込んだ値を、文字aとして計算機に読み込む。 echo -n "$a:" | tee $q2 #読み込んだ値aを使って、 a: と表示する。オプション-nを用いることで、改行せず並列させて表示する。それと同時に、ファイルにも書き込んでいる。 i=2 #文字iを2とおく。あるいは、シェル変数iに代入したと考える。 while test $i -ne $a #iがaと等しくない場合は、doからdoneの間のコマンドが繰り返し実行される。 do boo=`expr $a % $i` #exprコマンドを使ってa割るiの余りを計算し、その値をシェル変数booに代入する。 if test $boo -eq 0 #余り(booの値)が0になっているかどうかを調べ、それが真であればthen以下の、偽であればelse以下のコマンドを実行する。 then echo -n " $i" | tee -a $q2 #テストコマンドが真、つまりiでaが割り切れ、iがaの因数であるので、iの値を表示する。同時にファイルにも出力する。 a=`expr $a / $i` #分かった因数iで、aを割り、割った値を新たにaと置き直す。 else #ここからは、iがaの因数ではなかった場合に実行されるコマンドである。 i=$(($i+1)) #iに+1を加算する計算をし、新たにiと置き直す。 fi #fiまででがifの構文である。 done #doneまでで、2から順に因数を見つけては分解していく作業が繰り返され、最後の因数iがaと一致する。 echo " $a" | tee -a $q2 #最後にi=aとなっている値も、aの素因数であるので、忘れずに表示する。 echo 素因数分解が完了しました。 #素因数分解が完了したことを表示し、ユーザーに伝える。プログラム終了がする。 #最も小さい素数である2から順に1つづつ値を大きくしていき、因数をしらみつぶしに調べている。因数が見つかったらその都度でaを割り、その因数を除いているので、見つかる因数はすべて素数となっている。