素数大富豪判定アプリを作ってみたお話

この記事は 素数大富豪 Advent Calendar 2018 6日目の記事です。

adventar.org

昨日はbutchi_yさんの「素数大富豪研究のためのMathematicaユーティリティー関数」でした。

素数大富豪研究のためのMathematicaユーティリティー関数 - Qiita

 

初めまして!

twitter素数大富豪と競技プログラミングをしている高校生のtatyamと申します。

私からは自作素数判定アプリの紹介をしてみようと思います。

作った経緯

プログラミングしたい!!

    ↓

Mac買ってもらった!!

    ↓

アプリ作ろう!!

    ↓

 素数大富豪ディーラー作ろう!!

再現できました

デザインが全部デフォルトで、コードも難しくはないのでできてしまいました。*1

デザインが良くない?

アプリの作り方は分かってきたので作り直し。

電卓を参考にして良い感じにできました。*2

機能

素数判定・素因数分解

入力された数字について素数判定を行います。入力の限界は約20億桁ですが、その前に性能の限界になるでしょう。

素数判定はBigIntegerのisProbablyPrime(Miller-Rabin素数判定法)を利用しています。

これは確率的素数判定法ですが、合成数素数と判定する確率は 4^{-100} よりずっと小さいので問題ないでしょう。計算量はO(\log ^2N)です。

詳細はWikipediaがわかりやすいかと思います。

ミラー–ラビン素数判定法 - Wikipedia

また、素因数分解にはPollard-Rho法を利用しています。

ポラード・ロー素因数分解法 - Wikipedia

これすごくないですか??とっても速いです。計算量はO(N^{\frac{1}{4}}\log ^2N)です。

Xを入れてまとめて探索

Xを入れて素数判定をすると、Xに0~Kを入れてまとめて判定できます。*3

3つまでXを入れられます。

4つ子も九方美人も1画面に出すことができます。

コックさん素数もまとめて探索できます。

並べ替え最大素数の探索

判定ボタンを長押しすると、並べ替え最大素数を表示してくれます。Xを1つだけ入れることができます。

54枚入れても、1秒はかからない自信があります。(※最新の機種の場合)

計算量はO(\log ^3N)です。*4

タイマー

1手ごとの時間のほか、1人ごとの持ち時間を設定することができます。

今後の予定

  • 採譜モードをつくる

素数判定しながら採譜ができるというのを目指しています。

これができたら公開しようかな…?

  • iOS版について

実は最低限の部分だけはできています。公開にはApple Developer Program ($99/年) が必要なので支援をいただこうかな?と思っています。*5

フォントが素晴らしい…

さいごに

欲しい!と思っていただけた方、DMお待ちしております。

tatyam@JOIに向けて精進 (@tatyam_prime) | Twitter

すでに持っている方も、もう一度ダウンロードしてアップデートをお願いします。


とあるコンテストに素数大富豪の問題を出すことにしたので解いてほしいなー((o(ΦωΦ+)o))

Advent Calendar Contest 2018 - yukicoder


明日はでこぽんさんの「MathPowerで語呂素数ガチャつくった話」です!.+゚(o(。・д・。)o).+゚ワクワク

*1:ここまで3ヶ月くらい、機能追加に4ヶ月くらい(※常に進捗を出していたわけではないため参考値です)

*2:作り直してから3ヶ月、かなり完成度は高まりました。

*3:革新的ではありませんか?私はそう思います。

*4:詳細はあとで公開しようと思っています。

*5:実機テストは出来るのですが、7日で動かなくなります。