もう一人のY君

主にiPhoneのショートカットアプリのレシピやTipsなどを書いています. たまに数学の記事も書きます.

もう一人のY君 MENU  MENU

数論的関数をサクサク計算してくれるアプリケーション

150414_01

 

 こんにちは, @the_theorierです.

 

 仕事の都合で久しぶりにBorland C++Builderを使う事になったので, 復習を兼ねて以前mixiのあるコミュ向けに作ったアプリケーションを多少修正した上で再掲します.

 

数論的関数

 結構前から知恵袋でもそれなりに流行り, 最近ではスマホアプリでも見かけるmake10, 一番オーソドックスなルールだと「4つの数と四則演算を使って10にする」ゲーム, それで使えそうな「マニアックルール」のようなものです.

 

 より広義的に数学で「数論的関数」と呼ばれるものです.

 

論的関数(すうろんてきかんすう、: arithmetic(al) function)とは、定義域が正整数である複素数を値に持つ関数のことである。  - wikipedia 「数論的関数」-

 

事のあらまし

 もうここ数年関わってないんですが, 当時のmixiのコミュでmake10にハマっており, そこで度々議論になったのは「どこまで許容するか」でした.

 ヘタに関数を認めればキリがないですからね, 極論 f(f(f(f(f(x)))))…のような事も出来るわけです.

 余りマニアックすぎると新規の方も敬遠されますし, ある程度には絞ろうということで途中途中でルールが具体的になり, その中にこの数論的関数も取り上げられました.

 

 折角使えるとなれば大いに活用したい…ということで, BCBで多少なりともサポート出来れば便利かも…というのが切欠です.

 

アプリケーションについて

 前置きはさっさと終わりにして, アプリケーションの紹介に入ります.

 

Download

150414_01 150414_02
整数関数計算機
ver0.4.5
整数関数計算機(コンパクト版)
ver0.4.5

 

  仕様を少し変えて2つ作ってあります.

 OneDriveリンクのzipファイルになっています, リンクへ進んだらアイコンを右クリックして「ダウンロード」をクリックするか, チェックを入れた状態で上にある「ダウンロード」のアイコンをクリックします.

 面倒だったので他のと同じフォルダに突っ込んでます.

 インストーラ式ではないのでそのまま解凍して前者であればIF0_4_5.exe, 後者であればIFm0_4_5.exeで起動します.

 

150414_07

 今回更新する上で面倒だったのがこのセキュリティソフトによるものです.

 後述するように起動しない…という最悪は逃れましたがそれでもこのようにノートン先生に怒られてしまいました.

 他のセキュリティソフトでもありうるので, 表示が出る場合はそのまま実行を, 或いはexeファイルを右クリックして「管理者として実行」をお願いします. 

 

アンインストール

 インストーラ形式でも何でもないので, ファイルごと削除するだけで大丈夫です.

 

仕様

 取り敢えずコンパクト版でない方です.

 

150414_04

  画像の通りで, 左上に収録している各種関数の説明, そして右にあるボックスから数字を入力し, 「計算」で実行します.

 結果は下半分に表示されます, 「クリア」ボタンでnの値と計算結果をクリアします.

 

150414_05

  上の画像は試しにn=100を入力して計算したものです.

 黄色の枠内は素因数分解した結果です, もっと見た目に拘っても良かったんですが合理性には勝てませんでした…

 また右下に「計算」ボタンを押してから各種計算結果に結果が表示されるまでの時間が表示されます, 誰得ですね, そういうのが出来ると知って興味本位で付けただけですwww

 各種計算結果は画像の通りです, まず入力した正整数nの値を

 

n=pa×qb×rc×…

 

と素因数分解したと仮定し(但しp, q, r, ...は互いに異なる素数), 

 

・T(n) : 1からnまでの総和

・d(n) : nの正約数の個数

・σ(n) : nの正約数の総和

・φ(n) : 1からnまでの自然数のうち, nと互いに素な数の個数

・μ(n) : メビウス関数. nが平方数で割り切れるときμ(n)=0, それ以外の場合はnが異なるk個の素数で素因数分解されるとき, μ(n)=(-1)k

・[n] : 床関数

・sopf(n) : nの素因数の, 区別された和

  ⇔  sopf(n) = p + q + r + …

 ・sopfr(n) : nの素因数の, 重複を許した和

  ⇔ sopfr(n) = ap + bq + cr + …

 ・Ω(n) : nの素因数の, 重複を許した総数

  ⇔ Ω(n) = a + b + c + …

・ω(n) : nの異なる素因数の総数

  (cf) n = 20 = 22×5は異なる2つの素数の積なので, ω(20) = 2

 ・rad(n) : nの根基. nの異なる素因数の総積

  (cf) n = 20 = 22×5は異なる2つの素数の積なので, rad(20) = 2×5 = 10

 

 …となります, 後半になるごとにマニアックさが半端ないですねw

 

150414_06

  因みに入力出来る数に特に制限をかけていないため, 基本的にかなり大きな数字でも一応計算してくれます.

 上の画像では n = 231-8 = 2,147,483,648 の結果になります, 大体41.8秒かかるようですw

 理屈では231-1まではイケると思ったんですが数十分待ってもダメだったので諦めました…

 因みに n = 231-1 以降は変数定義の問題でエラーになります, 全く使えなくなるわけじゃないので中途半端な数にして待たされるよりかはまだマシかもしれませんねw

 というかT(n)やσ(n)は早々に変数オーバーして反転してしまいます, long型にしても良いんですが多分需要が無いだろうと思ってそのままにしていますw

 

 

150414_08

  そしてこちらがコンパクト版です.

 見ての通りで邪魔な説明を取っぱらい, フォーム自体をなるべく小さく, かつ入力出来るnの値を4桁までに制限してあります, 多分使うのはそのくらいだろうと.

 

150414_09

 4桁程度ならどの関数も変数割れしないのでちゃんと利用できます. 

 実行時間も高々数百μSecなので人の目では一瞬です.

 

 

更新

 以前のver0.4.4までのバージョンを利用されてる方向けに0.4.5での更新内容を書いておきます.

 

(追加)

・exeファイルアイコンとフォームアイコンを自作アイコンに変更

・プロパティにバージョンを表示↓

150414_10

  これをやってないとセキュリティソフトによってはexeファイルをボッシュートしてしまう(というかノートン先生がそうだった)ようだったので…そんなの酷いよ…

 

 (修正)

・空白のまま「計算」ボタンを押すとエラーになって使用不可になるため, 起動直後と「クリア」を押した場合Edit(nを入力する場所)に0を入力するよう修正.

 

 悪用しないでね, 特に学生のみんな☆(ゝω・)v