2017-01-18

中学生でもできる! 素因数分解プログラムを書いてみよう(bashで)

http://anond.hatelabo.jp/20170117205622

より。

「ワイは全然すごくない」という増田書き込みに対して「いや全然すごいよ」みたいな書き込み散見されるようだが、ここではっきりと申し上げておきましょう。

素因数分解プログラムで解くとかとか中学生でもできるぞ」と。つまり増田全然すごくないし、この記事を書くワイも全然すごくない。

素因数分解というのはなんか用語だけ聞くと難しそうに思うが、要は「ある数字素数の組み合わせに分解」するだけの話である

数字素数で割っていけば自然素因数分解が行えるのである

というわけで増田全然凄くないの根拠として、以下に素因数分解を行うプログラムサンプルを挙げる。

このプログラムbashで書いてあるが特にbashである必然性はないのでphpなりCで書き直してみるといいだろう。

中学生のお子様がいるご家庭の方は、これをサンプルとして別の言語で書かせてみると、その子プログラミング素養が図れるかもしれない。

#! /bin/bash

n=$1;
a=2;
while [ $a -lt $n  ]
do
  #割って余りが0なら素因数やな!
  m=$((n%a));
  if [ $m == 0 ]
  then
    # $n は 素数やない! $a で割り切れんで!
    #a自体素数かどうか調べなあかんecho -n "${a}x";
    n=$((n/a));
    a=2;
    continue;
  fi
  #素因数やないので割る数を増やしてみるで
  a=$((a+1));
done;
#余った $n は素数やな
echo  $n;

最初ソースバグってた。ちょっとしました)

このソースtest.shなどのシェルスクリプトファイル作成してその中に記述する。ソース記述した後はchmod +x で実行権限をつけてあげることを忘れないようにしよう。

このプログラムは渡された一番目の引数に対して素因数分解を行う。整数以外を入れた場合動作保証できないので、適宜チェック処理を入れるなりしよう。

このプログラムを実行すると、結果は以下のようになる。

$ ./test.sh 114514
2x31x1847

結果が不安なら電卓計算してみればいい。必ず合うはずだ。

ついでにクリップボードコピーする

結果を出すのはいいとして、元増田クリップボードコピーして貼り付けまでを手動で行っていたそうな。

MacOSならばクリップボードコピーするまでを一貫して行うことも可能だ。pbcopyというコマンドを使う。

$ ./test.sh 114514|pbcopy

これでクリップボードコピーされた状態になるので、そのままニコニコなりのコメント欄コピーすればいい。これで俊速素因数分解コメントが書き込めるようになる。

また、いちいちpbcopyコマンドを打つよりも今回作成したシェルスクリプトの中でpbcopyまでを行ってしまうのもありかもしれない。

いずれにせよ、今回の素因数分解というプログラムはかなり簡単な部類になるため、初心者への課題としてはうってつけだ。

どうです、簡単でしょう? 

ちなみに実行速度ですが、よほどデカ素数でもない限りジョン・フォン・ノイマン暗算よりは早いはずです。多分……

トラックバック - http://anond.hatelabo.jp/20170118060836

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん