アクセラと+αな生活
アクセラとα350と共に過ごす気まぐれ日記です。
Firefox ブラウザ無料ダウンロード
2017年10月
≪09月  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31    11月≫
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
「wxMaxima」はいろいろできますねww

スクリプトとしても利用できるので、せっかくなので、素数でも算出してみましょう。

算出ついでに、スクリプトの記述方法を勉強してみます。



「wxMaxima」では、「for 構文」を利用したループ処理が使えます。

「for 構文」は様々なプログラム言語であるメジャーなループです。

この「for 構文」を使って、10までの整数のうち、どの整数が素数であるか算出してみましょう。


まずは簡単な方法として、「primep()」関数を利用して、素数であるかの判断をする方法で素数を算出してみます。

「for 構文」を利用して、1 ~ 10までの整数でループさせ、それぞれの整数が素数であるかを判断してきます。
下記のようになります。
wxmaxima_20100531_001.jpg

「i」、「j」、「k」、「l」を変数として利用します。
最初の部分にある、「i:0$」などは、スクリプトで使用している変数を初期化しています。
「$」(ドルマーク)は、関数や命令文などの終わりを表します。

「wxMaxima」は「;」(セミコロン)をつけてしまうと、その数式やスクリプトをその時点で実行してしまうので、「$」を記述します。

あとは、「for 構文」で制御変数「i」を利用してループさせ、「primep()」関数で素数の判断を行ってます。
「wxMaxima」での「for 構文」は、ループの条件である「thru」(while、unless なども使えるよう。。。)で指定された境界値超えるまで、制御変数をインクリメントし、「do 文」を繰り返します。
このあたりは、他の言語でもほぼ同じ動作(記述方式が違うだけで、動作自体は同じ)ですので、特に難しくないでしょう。

「primep()」関数は素数の場合に「true」、素数で無い場合に「false」を返してくる関数ですので、「if 文」を利用して、条件分岐させています。

結構簡単に作れます。




では、次に、「primep()」関数を利用せず、素数であるかの判断を独自のロジックで組み込んでみましょう。

素数であるかの判断は様々な方法があります。
今回は、素数は「1とその整数以外で割り切れない整数」というのが定義なので、素数であるかを評価する整数より小ささ整数であまりがあるかないかを調べて、素数の判断を行うロジックにします。

※スクリプトの勉強のためのサンプルで作っているだけなので、このようなロジックは非効率です。
(桁数の大きな整数の素数であるかの判断では、その整数分ループするので、非効率的です)
実際に使うのであれば、効率的なアルゴリズムにする必要があります。



で、作成したスクリプトは以下のようになります。
wxmaxima_20100531_002.jpg
「0」と「1」は素数でないので、ループでの制御変数の初期値を「2」にしてます。
本来はきちんと判断するロジックを組み込まないといけませんね。。。

「wxMaxima」で、「for 構文」をネストすることもできました。
ですので、結構複雑なスクリプトもできてしまいますねww

インデントでスクリプトを階層化することもできるので、見やすく作っておくと、後でメンテナンスしやすくなります。






今回は素数を算出してみましたが、いろいろ、アルゴリズムなどを考えてみるのも面白いですね。
素数の算出方法もいろいろ考えることができますし、より効率のよいロジックにしたりできます。

例えば、3からはじまる奇数で割り切れるか(偶数は2の倍数ですから、偶数で割り切れるなら、2で割り切れるはずなので、偶数での確認は不要)を評価するようにすれば、上記のロジックのループ回数を半分にできます。

他にも素数の配列(リスト)を前もって用意しておき、その配列で割り切れる値があるかを確認するようにすれば、祖素数の判断回数を減らすことができます。


数学が苦手な私でも、いろいろ思いつくので、いろいろ試してみてはいかがでしょうか?
いろいろ考えれば、ボケ防止には役に立つでしょうww



コメント
この記事へのコメント
URL :
コメント :
パスワード :
管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
Template designed by アクセラと+αな生活

Powered by .
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。