世の中の現象の中には「ランダム」な現象が多々あります。たとえば、サイコロを振るのは分かりやすいランダムな現象の例です。他にも天気や地震、ギャンブルなども分かりやすいランダムな現象の例です。
一方で、コンピュータの中で行われる計算は、一定のアルゴリズムにより定められた計算が順次実行されることになるため、原理的にはランダムになることはありません。
このことはコンピュータ内でランダムな現象をシミュレーションするにあたって問題になります。そこで「決められた手順によって生成されるランダムっぽく振る舞う数列」をいかにして作るかが重要になるわけですね。このような数列を擬似乱数と言います。
コンピュータによって擬似乱数を生成する手法は、これまでもさまざまな手法が提案されています。今回は、その中でも特に有名な手法である 線形合同法 について考えたいと思います。
最近はもっと良い疑似乱数の生成法が発見されているので、線形合同法はあまり使われていないと聞きます。しかし、一昔前のC言語等の乱数生成には、この方法が普通に使われていました。
簡単に線形合同法について説明しましょう。線形合同法とは次のようなアルゴリズムです。
を であるような整数とし、整数 を次の漸化式によって定めます:
ただし、 は の中からとることにします。
このように数列 を選ぶと、 を決める毎に異なる疑似乱数の列が得られるというわけです。
たとえば、 とします。このとき、 とすると
のように数列 が得られます。
今回の数列は結構優秀で、数列をこのまま続けていくと、こうなるのですが・・・
実は、 からスタートして に戻ってくるまで、 から までの数がすべて1回ずつ出力されています。つまり、この数列の周期は というわけですね。周期は法 を超えることはないので、これが最大周期になります。
パラメータ によっては最大周期とならないケースも存在します。たとえば、 とすると
となりますが、これは が繰り返されるので、周期 となります。
あとで述べるように、一般に線形合同法によって得られる数列は周期 を持ち、その周期は となります。
今回のメインテーマは、パラメータ がどのような条件のとき周期最大()となるのか、という問題です。周期は長ければ長いほど疑似乱数としては優秀だと考えられるので、気になる問題設定です。
線形合同法において最大周期になる必要十分条件は知られていて、以下の定理1が成り立ちます。
実際、 のケースでは、条件 (i), (ii), (iii) を満たすので最大周期 になったというわけですね。
しかし、一体どうしてこのような必要十分条件になるのか気になりますね。そこで、今回の記事は 定理1を証明 してみたいと思います。
自力で考えてみてもなかなか難しかったので、証明がどこかに載っていないか調べてみましたが、ネット上で一般的なケースについての証明は見かけませんでした。
その後、Knuth先生の "The Art of Computer Programming Volume2 Seminumerical Algorithms" に証明が載っていることを知り、今回参考にさせていただきました。
しかしながら、証明を読んでいて納得いかない部分がいくつかありました。
こちらの記事では、大枠の証明は上記に従いつつも、いくらか自分流に修正したものをまとめたいと思います。
周期を持つことの確認
そもそも線形合同法が一般に周期を持つことについて考えてみましょう。
線形合同法は
という写像を考えて
という反復合成によって数列 を得る手法でした。
ここで、 は有限個の集合の元なので、 鳩の巣原理によって となるような非負整数 が存在することになります。
したがって、以降
となり、循環します。
を循環節、 を循環節の長さと呼ぶことにします。最小の循環節の長さを周期といい で表すことにします。
以上の議論によって、周期 を持つことが言えたというわけです。
(一般に、有限集合 に対して、写像 の反復合成によって得られる数列は周期を持ちます。)
また、 から始まる長さ の循環節があったとすると、 であることも次のようにして分かります。
から長さ で循環すると
となるはずです。
は周期なので、 のインデックスから を引いていっても等号が成り立つはずなので
が成り立ちます。しかし、 かつ であることは、 の最小性に反します。したがって、 は誤りであることがわかり、 であることが示されました。
合成とアフィン変換
の 回の合成
の結果を具体的に計算してみましょう。
のとき:
のとき:
のとき:
以上から、一般の に対して
が成り立ちます。
となるので、数学的帰納法により式 が示されました。
そんなわけで、 の具体的な行き先がわかりましたので、これを使って周期 を議論すれば良いわけですね。
最大周期 であることの必要十分条件は、集合としての等号
が成立することです。この場合は
となるような最小の が に一致するわけです。
また、 としても一般性は失わないので
となるような最小の が であるようなとき、 が最大周期であるというわけです。
まとめると
ということです。
ところで、今回の
という写像は、 から 自身へのアフィン変換となっています。
以前、 が素数のときのアフィン変換の性質について考えたことがありましたが、これの一般化を考えているわけです:
tsujimotter.hatenablog.com
実際、 としたアフィン変換全体は群をなし、その構造は半直積
の構造を持ちます。先ほどの 回の合成
も、半直積の群では
に対応します。
したがって、今回の問題は半直積の群における位数 の元 を考えていると読み替えることができそうです。
今回は純粋に初等整数論として取り扱うのでこの視点は用いないのですが、群論的に考えてみても面白いかもしれませんね。
に帰着
それでは、今回証明したい定理を改めて確認しましょう。
定理の条件 (ii), (iii) を見ると、 の素因数 に関する条件になっています。そこで、 の素因数分解をしたくなります。
各素因子のべき について、 を考えます。すなわち、パラメータを
としたときの について、線形合同法の周期を としましょう。
このとき、元々の周期 は、 の最小公倍数となっているというのが次の補題1です。
(補題1の証明)互いに素な整数 、 について、対応する周期を としたとき、 であることを示せばよい。
循環節の始まりを としても一般性は失わない。 とする。ここで、 は周期より
であるが、これを すると
である。したがって、 は における長さ の循環節である。
また、 における周期は なので、 が言える。
同じ議論を に対しても行うと、 を得る。
したがって、 は の公約数である。
一方、一般に が の公倍数であれば、 は の循環節になるので
である。中国剰余定理より
が言えるので
が成り立つ。これは が の最小公倍数であることを意味する。
鳩の巣原理により であることを使うと、 であることの必要十分条件は次のように得られます:
したがって
が示されました。
よって、 のケースに問題は帰着されました。
指数持ち上げ補題
さて、早速 のケースについての証明に行きたいところですが、その証明を行うために必要な補題を一つ準備しておきます。これは「指数持ち上げ補題(LTEの補題)」と呼ばれる補題の特別なケースです。
とする。
このとき、 で割り切れない整数 に対して次が成り立つ:
ここで、 は、整数 と なる整数 を用いて
と一意的に表せますが、この によって と定義されます。これを の 進付値 といいます。
(補題2の証明)
を因数分解すると
となる。p進付値の加法性により
となるので
が言えれば良い。
ここで左辺を で割っても より 進付値は変わらないので
と同値である。
なので、 なる整数 について
が言えれば良い。
- のとき:
より
となります。したがって であり、成立。
- のとき:
より、()として
よって、 であることが分かる。
以上により
が示された。
今回は使いませんが、より一般の場合は
という主張になります。詳しくは以下の記事をご覧ください。
integers.hatenablog.com
のケースの証明
そんなわけで、 における定理を証明するための準備は整いました。示すべき主張は次の通りです。
とする。また、パラメータ における線形合同法の周期を とする。
このとき、次の必要十分条件が成り立つ:
のケースが特殊なので、そこだけ先に議論しておきましょう。(ここの部分だけは一般の について議論できます。)
のとき、 となりますが、これは という数を足し続けることに他なりません。すなわち、 において、 が生成元である条件を考えていることになりますので、次が成り立ちます:
つまり、 における定理が示されました。
よって、以降は として考えます。このとき、等比数列の和公式により
であることに注意しましょう。
これを使うと、 であることの必要十分条件は
であることに注意しましょう。
の証明:
とする。すなわち、 なる最小の が であるとします。
- を示す
もし であれば であり、 は の可逆元ではありません。
このとき、 は にはならないので、 に矛盾します。
ゆえに
- を示す
(i) が奇数のとき:
であると仮定します。このとき、 は の可逆元であり
が成り立ちます。
周期 であるので、必要十分条件 と を使うと
となり、 である。これを とると
を得ます。
一方、フェルマーの小定理より
です。両辺 乗すると
が得られ、再度 乗すると
が得られます。繰り返し適用すると
が得られます。
と を合わせると を得ますが、これは の仮定に反します。
よって、 が示されました。
(ii) のとき:
のとき を示します。
のとき
であり、 よりこれは
と同値です。
ここで、 と仮定すると、① であるか ② かつ であるかのいずれかです。
①のとき、 より です。すなわち です。一方、①の条件から は偶数であり、これは であるから矛盾です。
②のとき、 であるから、 です。 として補題2(指数持ち上げ補題)を適用すると
また、補題2を として再度適用すると
繰り返し適用すると
となり
です。つまり
となります。
より、 の両辺を で割って
が得られます。これは の最小性に矛盾します。
ゆえに、 が示されました。
の証明:
かつ のとき、 であることを示します。
補題2(指数持ち上げ補題)を として適用すると
また、 として補題2を適用すると
繰り返し補題2を適用すると
を得ます。
したがって
が得られます。
パラメータ の線形合同法の周期を とすると
が成り立ちます。
式 に とすることで
が成立するので、 より です。すなわち、()であることがわかりました。
式 より でなければならないことが結論づけられます。
おわりに
今回は、線形合同法の周期が最大となるような必要十分条件を証明しました。証明は・・・かなり大変でした。
のケースに帰着できるということが一つのポイントでした。また、 において周期が になる条件を示す際には、指数持ち上げ補題をつかうのが面白かったですね。
指数持ち上げ補題については、以前よりせきゅーんさんのブログにて存在は知っていたのですが、いまいち使い所を理解していませんでした。
integers.hatenablog.com
今回、見事にハマる応用例を知ることができて面白かったです。
実は、元々は としてアフィン群 における の位数から示す方針で考えていたのですが、どうもうまくいきませんでした。結局、 を処理する部分がキーになるのですが、 のときに 内で二項定理が使えないので、うまく証明できませんでした。また気が向いたら考えてみたいと思います。
以前考えていたアフィン群の位数の問題
tsujimotter.hatenablog.com
や、 の冪零性の問題
tsujimotter.hatenablog.com
など、過去の話が繋がってきて面白いなと思いました。
いずれにしても って面白いですね! さすがにもう遊びつくしたかなと思っていたのですが、まだまだ楽しめそうな気がします。
それでは今日はこの辺で!
参考文献
指数持ち上げ補題の証明はこちらを参考にさせていただきました。
integers.hatenablog.com
線形合同法の周期で調べていくうちに見つけたブログ記事です。
oupo.hatenadiary.com
実は、Knuth先生の本を早い段階で見つけてしまったので、あまり参考にできていないのですが、 のケースについて証明しているようです。今回やったように素数のべきのケースに帰着できるので、本質的な方法と言えそうですね。ただ、 のときは、今回やったように大分例外的な議論が必要なので、証明は大変そうです。
そして、一番参考したのはこちらの本です。
他のページも面白そうだなと思ったので、気が向いたら読んでみようと思いました。
ただ、上記の本を購入したいと思っている方へあらかじめ注意を述べておくと、「Kindle版は買わない方がいい」と思います。数式のレイアウトが、かなりひどい状況になっています。紙の本を買いましょう。
おまけ(2021.05.26追記)
が偶数のとき、線形合同法は偶数・奇数を交互に出力することが知られています。
それが原因で「カルドセプトサーガ」というXbox360向けゲームで「ダイス目が偶数と奇数を繰り返す致命的バグ」が発生し、店頭在庫が回収されることになったとか。
http://www.math.sci.hiroshima-u.ac.jp/m-mat/TEACH/ichimura-sho-koen.pdf