#!/bin/bash ######################### # source-encoding >> UTF-8 # # 素因数分解 # author : 河合 佑太 # ########################## t_name=quiz2_output.txt #素因数分解を行う関数を定義 function solver1() { #割る数の初期値は2 dividNum=2 #引数を変数targetNumに格納 targetNum=$1 #決まった素因数から表示していく echo -n ">> ${targetNum}:" | tee $t_name #ターゲットの数の平方根までを割る数は考慮すればよいので #そのための変数を用意 targetSqrt=$(echo "sqrt($targetNum)" | bc) #割る数がターゲットの数の平方根以下の間はwhileループを回す while [ $dividNum -le $targetSqrt ] do #ターゲットの数が割る数で割り切れるならばその割る数は素因数。 if [ 0 -eq `expr $targetNum % $dividNum` ]; then #ターゲットの数を割る数で割りtargetNumを更新する targetNum=`expr $targetNum / $dividNum` #収束を早めるため、もう一度更新されたtargetNumの平方根をとる targetSqrt=$(echo "sqrt($targetNum)" | bc) #決まった素因数から表示していく echo -n " ${dividNum} " | tee -a $t_name else #現在割る数は素因数ではないのでdividNumをインクリメントする dividNum=`expr $dividNum + 1` fi done #最後にtargetNumが1以外の場合は、targetNum自体が素因数であり、それを付け足す必要がある。 if [ $targetNum != 1 ]; then echo -n " ${targetNum}" | tee -a $t_name fi echo " " } #素因数分解すべき数を入力してもらう echo "What's the number?" echo '?' read readNum #読み込んだ値を引数に関数solver1を呼び出す solver1 $readNum