(57)【要約】【課題】実質的に際限のない周期長を持った疑似乱数列を生成する。【解決手段】テント写像による写像演算を行うテント写像演算手段１０と、前記テント写像を整数演算で可能とするために、最大区間を整数倍するときの値Ｐとして、素数で且つ（Ｐ−１）／２に基づき最大周期長の条件を満足するＰを選択して前記テント写像演算手段１０へ与えるテント写像パラメータ選択手段２０と、前記テント写像演算手段１０による演算結果に基づき所定長の数列を生成する乱数生成手段３０とを具備する。【選択図】図１Ａ
2020042453.tif 000002
【特許請求の範囲】
【請求項１】
テント写像による写像演算を行うテント写像演算手段と、
前記テント写像を整数演算で可能とするために、最大区間を整数倍するときの値Ｐとして、素数で且つ（Ｐ−１）／２に基づき最大周期長の条件を満足するＰを選択して前記テント写像演算手段へ与えるテント写像パラメータ選択手段と、
前記テント写像演算手段による演算結果に基づき所定長の数列を生成する乱数生成手段と
を具備することを特徴とする擬似乱数生成装置。
【請求項２】
前記テント写像パラメータ選択手段は、（Ｐ−１）／２が素数であることを最大周期長の条件としてＰを選択することを特徴とする請求項１に記載の擬似乱数生成装置。
【請求項３】
前記テント写像パラメータ選択手段は、（Ｐ−１）／２を素因数分解して求めた素因数Ｃｍにより算出されたＫｍが、Ｋｍ≦（ｌｏｇ2Ｐ−１）が成り立つことを最大周期長の条件としてＰを選択することを特徴とする請求項１に記載の擬似乱数生成装置。
【請求項４】
前記テント写像パラメータ選択手段は、２Km±１≡０（ｍｏｄ  Ｐ）の成立を判定し、成立する場合には当該Ｐを用いないことを特徴とする請求項３に記載の擬似乱数生成装置。
【請求項５】
前記テント写像演算手段がテント写像の１周期分演算を行う毎に、前記テント写像パラメータ選択手段から新たなＰを与えるように制御するパラメータ遷移制御手段を具備することを特徴とする請求項１乃至４のいずれか１項に記載の擬似乱数生成装置。
【請求項６】
前記乱数生成手段は、テント写像による写像結果を順次並べて、乱数とすることを特徴とする請求項１乃至５のいずれか１項に記載の擬似乱数生成装置。
【請求項７】
前記テント写像演算手段は、２系列のテント写像の系列を備え、各系列に異なる初期値を与えてテント写像を繰り返し、
前記乱数生成手段は、各テント写像毎に１系列から１ビットずつ、合計２ビットを得る処理を繰り返し、並べて所定長の乱数列とすることを特徴とする請求項１乃至６のいずれか１項に記載の擬似乱数生成装置。
【請求項８】
前記テント写像演算手段は、３系列のテント写像の系列を備え、各系列に異なる初期値を与えてテント写像を繰り返し、
前記乱数生成手段は、各テント写像に第１の系列から所定ビット、第２の系列から所定ビット、第３の系列から所定ビットを得て、並べて所定長の乱数列とすることを特徴とする請求項１乃至７のいずれか１項に記載の擬似乱数生成装置。
【請求項９】
前記乱数生成手段は、テント写像演算の結果と前記Ｐの値の全部または一部との演算を行い、この演算結果から所定長の乱数列とすることを特徴とする請求項１乃至８のいずれか１項に記載の擬似乱数生成装置。
【請求項１０】
コンピュータを、
テント写像による写像演算を行うテント写像演算手段、
前記テント写像を整数演算で可能とするために、最大区間を整数倍するときの値Ｐとして、素数で且つ（Ｐ−１）／２に基づき最大周期長の条件を満足するＰを選択して前記テント写像演算手段へ与えるテント写像パラメータ選択手段、
前記テント写像演算手段による演算結果に基づき所定長の数列を生成する乱数生成手段
として機能させることを特徴とする擬似乱数生成プログラム。
【請求項１１】
前記コンピュータを、前記テント写像パラメータ選択手段として、（Ｐ−１）／２が素数であることを最大周期長の条件としてＰを選択するように機能させることを特徴とする請求項１０に記載の擬似乱数生成プログラム。
【請求項１２】
前記コンピュータを、前記テント写像パラメータ選択手段として、（Ｐ−１）／２を素因数分解して求めた素因数Ｃｍにより算出されたＫｍが、Ｋｍ≦（ｌｏｇ2Ｐ−１）が成り立つことを最大周期長の条件としてＰを選択するように機能させることを特徴とする請求項１０に記載の擬似乱数生成プログラム。
【請求項１３】
前記コンピュータを、前記テント写像パラメータ選択手段として、２Km±１≡０（ｍｏｄ  Ｐ）の成立を判定させ、成立する場合には当該Ｐを用いないように機能させることを特徴とする請求項１２に記載の擬似乱数生成プログラム。
【請求項１４】
前記コンピュータを、前記テント写像演算手段がテント写像の１周期分演算を行う毎に、前記テント写像パラメータ選択手段から新たなＰを与えるように制御するパラメータ遷移制御手段として機能させることを特徴とする請求項１０乃至１３のいずれか１項に記載の擬似乱数生成プログラム。
【請求項１５】
前記コンピュータを、前記乱数生成手段として、テント写像による写像結果を順次並べて、乱数とするように機能させることを特徴とする請求項１０乃至１４のいずれか１項に記載の擬似乱数生成プログラム。
【請求項１６】
前記コンピュータを、前記テント写像演算手段として、２系列のテント写像の系列を備え、各系列に異なる初期値を与えてテント写像を繰り返すように機能させ、
前記コンピュータを、前記乱数生成手段として、各テント写像毎に１系列から１ビットずつ、合計２ビットを得る処理を繰り返し、並べて所定長の乱数列とするように機能させることを特徴とする請求項１０乃至１５のいずれか１項に記載の擬似乱数生成プログラム。
【請求項１７】
前記コンピュータを、前記テント写像演算手段として、３系列のテント写像の系列を備え、各系列に異なる初期値を与えてテント写像を繰り返すように機能させ、
前記コンピュータを前記乱数生成手段として、各テント写像に第１の系列から所定ビット、第２の系列から所定ビット、第３の系列から所定ビットを得て、並べて所定長の乱数列とするように機能させることを特徴とする請求項１０乃至１６のいずれか１項に記載の擬似乱数生成プログラム。
【請求項１８】
前記コンピュータを、前記乱数生成手段として、テント写像演算の結果と前記Ｐの値の全部または一部との演算を行い、この演算結果から所定長の乱数列とするように機能させることを特徴とする請求項１０乃至１７のいずれか１項に記載の擬似乱数生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、擬似乱数生成装置及び擬似乱数生成プログラムに関するものである。
【背景技術】
【０００２】
従来、一次元写像（テント写像やロジスティック写像）による疑似乱数生成方法がいくつか提案されている。これらは一次元写像による写像の度に値を乱数として取得していくものである。しかしながら、有限演算精度実装では、演算精度の割には、かなり短い周期帯に入ることで乱数性能が悪くなるといった問題がある。このため系列を変動させる機構を取り入れ長周期化を図り、乱数性能を向上させるといった工夫を施している。
【０００３】
従来の一次元写像による乱数生成において周期を延長するためには、乱数生成系列を自己フィードバックしたり外部からの不確定な系列で撹乱したりするものであった。従ってこのような乱数生成手法では、理論的に一度出力された同じ値は出力することが無いといった一様性の保証は得られなく、数値に偏りが生じた場合に乱数性が悪くなってしまう懸念を含んでいた。また、最大周期長の見積もりも確定的に行えないといった問題があった。
【０００４】
特許文献１には、周期性を考慮したカオス的乱数列の発生装置が開示されている。この特許文献１では一次元写像による乱数生成方法において周期を巧妙に延長する手段が紹介されているが、一様性の保証面の言及がなされておらず、周期長の延長に限界がある。
【０００５】
また、一周期内で一様な乱数が得られるものとしては、「線形合同法」や「線形フィードバックシフトレジスタ（ＬＦＳＲ）」、「メルセンヌツイスター」などが知られている。しかしながら、これらのものでは、一様な値を最大周期にて乱数生成が行われるような最適なパラメータを、経験的に予め探索しなくてはならないといった労力が必要となる。
【０００６】
特許文献２には、乱数生成モジュールで生成された乱数列から乱数とする数列を選択する際に、素数を利用するという周期拡張方法が開示されている。しかしながら、この特許文献２に記載のものは、周期の一様性を保証するものではない。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平９−２９２９７８号公報
【特許文献２】特開２００９−３９２５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明は上記の様な従来の乱数生成における問題点に鑑みてなされたもので、実質的に際限のない周期長を持った疑似乱数列を生成することが可能な疑似乱数生成装置及び疑似乱数生成プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明に係る擬似乱数生成装置の実施形態は、テント写像による写像演算を行うテント写像演算手段と、前記テント写像を整数演算で可能とするために、最大区間を整数倍するときの値Ｐとして、素数で且つ（Ｐ−１）／２に基づき最大周期長の条件を満足するＰを選択して前記テント写像演算手段へ与えるテント写像パラメータ選択手段と、前記テント写像演算手段による演算結果に基づき所定長の数列を生成する乱数生成手段とを具備することを特徴とする。
【図面の簡単な説明】
【００１０】
【図１Ａ】本発明に係る疑似乱数生成装置の実施形態の構成を示すブロック図。
【図１Ｂ】本発明に係る疑似乱数生成装置の実施形態の動作を示すフローチャート。
【図２】本発明に係る疑似乱数生成装置の実施形態で用いるテント写像のマップを示す図。
【図３】本発明に係る疑似乱数生成装置の実施形態で用いるテント写像の時系列変化を示す図。
【図４】本発明に係る疑似乱数生成装置の実施形態で用いるテント写像と位相共役の関係にあるロジスティック写像のマップを示す図。
【図５】本発明に係る疑似乱数生成装置の実施形態で用いるテント写像と位相共役の関係にあるロジスティック写像の時系列変化を示す図。
【図６】本発明に係る疑似乱数生成装置の実施形態で用いるテント写像とロジスティック写像の位相共役の関係を示すための時系列の値変動を示す図。
【図７】２の乗数を、素数Ｐで法を採った場合の値を示す図。
【図８】いくつかの素数Ｐを用いて式（８）によって、テント写像演算を行った場合の時系列変化を数値で示す図。
【図９】本発明に係る疑似乱数生成装置のテント写像パラメータ選択手段の第１の実施形態による動作を示すフローチャート。
【図１０】素数Ｐが行方向の値を採るときの“（Ｐ−１）／２”の値、“（Ｐ−１）／２”が素数であるか否かの情報（素数である場合に「（Ｐ−１）／２が素数」欄に“○”をつけた）、“（Ｐ−１）／２”の素因数分解した結果値などを一覧としたテーブルを示す図。
【図１１】本発明に係る疑似乱数生成装置の乱数抽出方法の一例によって実現される２系列のテント写像演算値と乱数ビットの値を列方向に時系列で示す図。
【図１２】本発明に係る疑似乱数生成装置の乱数抽出方法実施形態の一例である第２の乱数生成方法の処理を示すフローチャート。
【図１３】図１２の方法における前段のテント写像演算のテント写像マップを示す図。
【図１４】本発明に係る疑似乱数生成装置の乱数抽出方法実施形態の一例として、乱数生成手のため、テント写像演算の結果と素数Ｐの値の全部または一部との演算を行い、この演算結果から所定長の乱数列とするときの数値例を示す図。
【図１５】本発明に係る疑似乱数生成装置の乱数抽出方法実施形態の一例である第３の乱数生成方法の処理によるＰとして７を採用した場合の計算の流れを示す図。
【図１６】本発明に係る疑似乱数生成装置の乱数抽出方法の実施形態の一例である第３の乱数生成方法の処理によるＰとして４３を採用した場合の計算の流れを示す図。
【図１７】本発明に係る疑似乱数生成装置の実施形態が採用する「あり得ない短い周期を除外する判定」を含めたＰ選択処理の実施形態のフローチャート。
【図１８】合同算術による余りの掛算の性質を示す図。
【発明を実施するための形態】
【００１１】
本実施形態では、テント写像にて生成される乱数系列で１度出現した値は２度と出現さないことを実現する。これにより、その１周期内で保証する乱数列を生成可能にし、際限なく周期の延長を可能とする。
【００１２】
テント写像は、ロジスティック写像と位相共役の関係にあり、テント写像はロジスティック写像の位相に相当するものである。位相が元に戻る写像の回数に着目すると、テント写像を整数演算で可能とするために最大区間［０，１］をＰ倍する値Ｐが上記「位相が元に戻る写像の回数」に相当し、フェルマーの小定理から写像の周期長を知ることができる。
【００１３】
このため、最大周期についてはこの値Ｐに素数（１またはそれ自身の数以外では割り切れなく余りが出る自然数）を用いることで実現を図る。つまり、上記値Ｐとして素数を採用する。そして、最大周期と一様性の保証についてフェルマーの小定理または本実施形態において後に示す式を用いて判定を行い、選定した素数を利用してテント写像による写像を、１周期分行い乱数を取得する。
【００１４】
テント写像の反復が１周期分を周回したら、次の素数候補を用意し最大周期と一様性の保証ができるか再び判定し、素数を選定してゆく手法を採用する（後に示すパラメータ遷移制御手段４０）。素数にて実現できるテント写像を最大周期の１周期分行い、次に異なる素数を選定してテント写像の写像を１周期ずつ繰り返していくことで、実質的に際限なく周期を拡張できる系を生成して一様性を保証する乱数列を取得可能にする。
【００１５】
テント写像を用いるメリットとしては、従来の疑似乱数生成方法と比較し、引き算とシフト演算のみのシンプルな演算で構成できる点を挙げることができる。このため、計算負荷が少なく、かつ最大周期と一様性を保証するエルゴード性のある乱数列を際限なく長い周期で取得できる。
【００１６】
また、本実施形態では、傾き２のテント写像の反復毎の数値をそのまま使用すると乱数性能が悪いため、数値Ｘiから乱数列を抽出する方法についても言及する。
【００１７】
＜実施形態１＞  テント写像の最大区間［０，１］をＰ倍する値Ｐとして素数を採用
以下添付図面を参照して、本発明に係る疑似乱数性装置の実施形態を説明する。本実施形態では、テント写像を用いた乱数生成を行う場合においてテント写像を整数演算で可能とするために最大区間［０，１］をＰ倍する値Ｐとして素数を用いるによって生成される乱数値の周期長を一様にし、且つ十分に周期の長いものが得られるようにする。
【００１８】
本発明に係る擬似乱数生成装置の実施形態は、図１Ａに示すように、テント写像演算手段１０と、テント写像パラメータ選択手段２０と、乱数生成手段３０とを備えている。テント写像演算手段１０は、テント写像による写像演算を行うものである。テント写像パラメータ選択手段２０は、上記テント写像を整数演算で可能とするために、最大区間を整数倍するときの値Ｐとして、素数で且つ（Ｐ−１）／２に基づき最大周期長の条件を満足するＰを選択して前記テント写像演算手段１０へ与えるものである。乱数生成手段３０は、上記テント写像演算手段１０による演算結果に基づき所定長の数列を生成するものである。
【００１９】
本実施形態では、パラメータ遷移制御手段４０を備える。パラメータ遷移制御手段４０は、上記テント写像演算手段１０がテント写像の１周期分演算を行う毎に、その通知を受けて、上記テント写像パラメータ選択手段２０から新たなＰを与えるように制御する。疑似乱数の生成が、テント写像の１周期分演算以内に終了する構成の疑似乱数生成装置においては、このパラメータ遷移制御手段４０は不要とすることができる。
【００２０】
(写像)
○テント写像について
テント写像は以下の式（１）で定義される。
【数１】
2020042453.tif 000003
【００２１】
テント写像のマップを図２に示し、式（１）のｉを横軸にとり、縦軸をＸiとした時系列を図３に示す。
【００２２】
特開２０１６−０３９４１８号公報においては、テント写像型のＡ／Ｄ変換回路を用いて、“Ｘi＜０．５”のとき、ビット０を取得し、“０．５≦Ｘi”のとき、ビット１を取得し連続して４ビット得る場合、初期値Ｘ0について区間［０，１］を均等に１６分割した各区間から選択すると１６通りのビット列が得られることが示されている。このため、テント写像ではあらゆるパターンを潜在的に生成できることから、初期値Ｘ0の採り方により乱数検定に合格できるビット列を生成すれば、高い乱数性能を持つ乱数生成器として利用できることが判る。
【００２３】
また、テント写像の初期値Ｘ0の設定次第で、あらゆるバイナリ値を採ることができるため、周期的な振る舞いをする系列も考えられる限り与えることができる。このため、テント写像の初期値Ｘ0により周期長を予め知ることができれば、その周期長分のテント写像を行って乱数列として出力し、更にその後に異なる周期長を持つ周期帯の写像を行うというように、繰り返し周期の異なる写像の繰り返しを行うことで無制限に周期の異なる疑似乱数列を取得できると考えられる。つまり初期値Ｘ0で１周期分のテント写像を行い乱数列として出力し、次に初期値Ｘ0を変更して次の１周期分のテント写像を行い乱数列として出力にすることを繰り返し行うことで無制限に周期の異なる疑似乱数列を取得できると考えられる。
【００２４】
このようにテント写像の初期値Ｘ0を設定することを考えると、循環する小数（有理数［分数で表される数］）を設定すればよい。更に、初期値Ｘ0から予め周期長が判れば乱数の設計に有利である。ここで、テント写像はロジスティック写像と位相共役にあることが知られていることを利用できる。つまり、ロジスティック写像の位相はテント写像に該当するため、位相が元に戻る最大周期の判定を以下で説明するフェルマーの小定理を用いて導くことで、一様な乱数生成系列を得ることへ繋げる。
【００２５】
○テント写像とロジスティック写像との位相共役について
ロジスティック写像は以下の式（２）で定義される。
【数２】
2020042453.tif 000004
【００２６】
ロジスティック写像のマップを図４に示し、式（２）のｉを横軸とし、縦軸をＸiとした時系列を図５に示す。
図５の時系列では初期値Ｘ0＝０．３を設定し、式（２）の写像遷移は、
Ｘ1＝４ｘ０．３（１−０．３）＝０．８４
である。
【００２７】
結果のＸ1＝０．８４が反復入力され、
Ｘ2＝４ｘ０．８４（１−０．８４）＝０．５３７６
が得られる。このように、出力値が入力値として反復され縦軸Ｘiが開区間（０，１）において遷移されて行く。
【００２８】
テント写像は式(1)で定義され、写像の反復区間は開区間（０，１）になるが、ここで円周率π（３．１４１５９…）倍した区間（０，π）としＸiをθiとした式と置き換えると次の式（３）に変形できる。
【数３】
2020042453.tif 000005
【００２９】
ここで式（３）のθを式（１）のθ1として代入し、このときロジスティック写像はＸ1として、次の式（４）の変数変換を行う。
【数４】
2020042453.tif 000006
【００３０】
これについてテント写像式（３）の写像を式（４）の位相として捕えることで、ロジスティック写像は常に次に式と同期する位相共役な関係にあることが判る。
【数５】
2020042453.tif 000007
【００３１】
【数６】
2020042453.tif 000008
【００３２】
図６からテント写像の系とロジスティック写像の系が同期していることが判り、位相共役の関係にあることが視覚的に読み取れる。
ロジスティック写像の式（２）の初期値Ｘ0を三角関数ｓｉｎ2θの場合として代入すると、
【００３３】
【数７】
2020042453.tif 000009
【００３４】
図６から初期値Ｘ0の選択によりロジスティック写像式（２）を変形した式（５）の三角関数の位相“２nθ”に注目すると、初期値θにπを単純に任意の整数（ここでは素数とする）で割った値を入れた場合、短い周期でロジスティック写像の反復が遷移されることが判る。
【００３５】
例えばπを１１で割った値“θ＝π／１１（０．２８５５９９３３２…）”を設定したとき、式（５）よりＸ11まで計算すると
Ｘ0＝ｓｉｎ2２0（π／１１）＝ｓｉｎ2（π／１１）
Ｘ1＝ｓｉｎ2２1（π／１１）＝ｓｉｎ2（２π／１１）
Ｘ2＝ｓｉｎ2２2（π／１１）＝ｓｉｎ2（４π／１１）
Ｘ3＝ｓｉｎ2２3（π／１１）＝ｓｉｎ2（８π／１１）
Ｘ4＝ｓｉｎ2２4（π／１１）＝ｓｉｎ2（１６π／１１）
＝ｓｉｎ2（π＋５π／１１）＝（−ｓｉｎ（５π／１１））2
＝ｓｉｎ2（５π／１１）
Ｘ5＝ｓｉｎ2２5（π／１１）＝ｓｉｎ2（３２π／１１）
＝ｓｉｎ2（２π＋１０π／１１）＝ｓｉｎ2（１０π／１１）
＝ｓｉｎ2（π−１０π／１１）＝ｓｉｎ2（π／１１）
Ｘ6＝ｓｉｎ2２6（π／１１）＝ｓｉｎ2（６４π／１１）
＝ｓｉｎ2（４π＋π＋９π／１１）＝（−ｓｉｎ（９π／１１））2
＝ｓｉｎ2（９π／１１）＝ｓｉｎ2（π−９π／１１）
＝ｓｉｎ2（２π／１１）
Ｘ7＝ｓｉｎ2２7（π／１１）＝ｓｉｎ2（１２８π／１１）
＝ｓｉｎ2（１０π＋π＋７π／１１）＝（−ｓｉｎ（７π／１１））2
＝ｓｉｎ2（７π／１１）＝ｓｉｎ2（π−７π／１１）
＝ｓｉｎ2（４π／１１）
Ｘ8＝ｓｉｎ2２8（π／１１）＝ｓｉｎ2（２５６π／１１）
＝ｓｉｎ2（２２π＋π＋３π／１１）＝（−ｓｉｎ（３π／１１））2
＝ｓｉｎ2（３π／１１）＝ｓｉｎ2（π−３π／１１）＝ｓｉｎ2（８π／１１）
Ｘ9＝ｓｉｎ2２9（π／１１）＝ｓｉｎ2（５１２π／１１）
＝ｓｉｎ2（４６π＋６π／１１）＝ｓｉｎ2（６π／１１）
＝ｓｉｎ2（π−６π／１１）＝ｓｉｎ2（５π／１１）
Ｘ10＝ｓｉｎ2２10（π／１１）＝ｓｉｎ2（１０２４π／１１）
＝ｓｉｎ2（９２π＋π＋π／１１）＝（−ｓｉｎ（π／１１））2
＝ｓｉｎ2（π／１１）
Ｘ11＝ｓｉｎ2２11（π／１１）＝ｓｉｎ2（２０４８π／１１）
＝ｓｉｎ2（１８６π＋２π／１１）＝ｓｉｎ2（２π／１１）
【００３６】
となり、“Ｘ0”と“Ｘ5”に着目すると位相θは“π／１１”と元に戻っており、“Ｘ10”の位相θも“π／１１”となっているため、ロジスティック写像の“初期値Ｘ0＝ｓｉｎ2（π／１１）”としたとき周期長５の周期を持ち写像が遷移することが読み取れる。また、テント写像の式（３）では“初期値Ｘ0＝π／１１”としたとき、ロジスティック写像との位相共役との関係からも周期長５で写像が半永久的に反復することが判る。
テント写像の式（１）では式（３）の最大区間は［０，π］のためπで割った“初期値Ｘ0＝１／１１”を設定すれば、周期長５で写像が反復することが判る。
【００３７】
ここで位相“２nθ”に着目すると、初期値“θ＝π／１１”に対し“２n”の乗算を行った位相となり、位相は２π（３６０°）で元に戻るため例えば上記の“ｎ＝１１”を見ると２を１１乗した位相は、
２11（π／１１）＝２０４８π／１１＝１８６π＋２π／１１＝２π／１１
となり、これは２11＝２０４８に対して“１１”で割ると余りが２（商は１８６）となる。従って、位相では“２０４８π／１１”と“２π／１１”は同義となる。この余りの値に着目すると、２の１１乗数に対して１１で割った余りを示す合同算術の“法（ｍｏｄｕｌｏ）”が“２π／１１”の分子の値２が相当する。
【００３８】
合同算術は以下の式で表される。
【数８】
2020042453.tif 000010
【００３９】
上記合同算術の式は、２11＝２０４８に対して１１で割ると余りが２となることを示し、１１の法（ｍｏｄｕｌｏ）を採ると剰余は２となる意味を表している。
【００４０】
フェルマーの小定理では合同算術において“ｐ”を素数とし、“ａ”を“ｐ”の倍数でない整数（“ａ”と“ｐ”は互いに素［最大公約数が１］、つまり“ｐ”が素数であればよい）とするときに以下の式（６）が成り立つことが知られている。
【数９】
2020042453.tif 000011
【００４１】
上記の例では素数“ｐ”は１１であり、“ａ”は２とすると式（６）の関係が成り立っている。また“ａ”の“ｐ−１”乗を“ｐ”で割った余りは１であるという以下の式（７）が成り立つこと（式（６）の両辺を“ａ”で割る意）も判る。
【数１０】
2020042453.tif 000012
【００４２】
図７に、“ｐ”を素数７から４７まで“ａ＝２”とした場合の式（６）の計算結果を示す。
数値の１を網掛けにして示しているが“ｐ＝１１”のとき、つまり乗数が“ｐ−１＝１０”のとき、法を採った値は１、“ｐ＝１９”では乗数が“ｐ−１＝１８”のとき、法を採った値も１となっており、式（７）が成り立っていることが確認できる。
【００４３】
上記からロジスティック写像の式（５）の位相の初期値として素数“ｐ”を分母として与えて“２p”の乗算を行ったとき、式（６）から割り切れない数は、仮分数（２pπ／ｐ）から帯分数（１８６）の真分数が“２π／ｐ”となるため、真分数の分子の２は割り算の余りとして示される。このことからフェルマーの小定理により分母“ｐ”を素数としたときにロジスティック写像と、その位相となるテント写像が“ｐ−１”のとき値が戻る周期を持つことが判る。
即ち、テント写像の式（１）では、“初期値Ｘ0＝１／ｐ”を与えれば、Ｘp-1は“１／ｐ”と初期値Ｘ0に戻り、“ｐ−１”の周期を持つことが予想される。
【００４４】
ここで、式（１）を整数で演算が行えるように、最大区間を［０，１］からＰ倍に拡大したものが以下の式（８）になる。
【数１１】
2020042453.tif 000013
【００４５】
上記式（８）では区間をＰ倍しているため、式（１）では“初期値Ｘ0＝１／ｐ”だが、式（８）では“初期値Ｘ0＝１”を与えることになる。
【００４６】
図８に、Ｐを素数７から４７を用いてテント写像において“初期値Ｘ0＝１”を与えて写像の反復を行ったときに得られる各Ｘiを示す。ここでＸiの値はテント写像の式（８）から全て２倍され偶数を採るはずだが、初期値Ｘ0に奇数を採った場合に初期値Ｘ0が元に戻る値が確認できるように、式（８）が“Ｐ／２≦Ｘi”のときは“（Ｐ−Ｘi）”の値をＸiとして示している。
図７の２p-1にＰで法（ｍｏｄｕｌｏ）を採った値が１となっているが、同様に図８のテント写像では“Ｐ−１”回目の写像の値は１に戻っていることが読み取れる。
【００４７】
ここで、素数１１の列に注目すると左側の２の乗数を採った結果は“ｎ”が１０のとき法をとった値が１となっており周期が１０だが、テント写像では“ｎ”が５のときの値も１になっており周期が５になっている。
これはロジスティック写像の式（５）の初期値Ｘ0の位相“θ＝π／１１を与えてトレースした例を見ると判るように、Ｘ5にてＸ0と同じ値になっているが三角関数のため、
Ｘ5＝ｓｉｎ2２5（π／１１）＝ｓｉｎ2（３２π／１１）
＝  ｓｉｎ2（２π＋１０π／１１）＝ｓｉｎ2（１０π／１１）
となるが、三角関数の補角公式では “ｓｉｎ（１０π／１１）
＝ｓｉｎ（π−１０π／１１）”となるため、
＝ｓｉｎ2（π−１０π／１１）＝ｓｉｎ2（π／１１）
が得られ、初期値Ｘ0に戻るためである。
【００４８】
つまり、図７のように２の乗数に１１の法を採った値は｛１，２，３，４，５，６，７，８，９，１０｝それぞれ１回を採り、周期長１０で繰り返されるが、サイン関数の位相“２nθ”にあてた場合、位相が
｛６π／１１，７π／１１，８π／１１，９π／１１，１０π／１１｝と｛５π／１１，４π／１１，３π／１１，２π／１１，１π／１１｝のとき、サイン関数（ｓｉｎθ）では同じ値をとるため、ロジスティック写像とテント写像の周期長は５となることが判り、図８のテント写像の採る値は｛１，２，３，４，５｝それぞれ１回になる。
【００４９】
図７のフェルマーの小定理の規則では、ｎ＝５のとき２5の１１の法（ｍｏｄｕｌｏ）を採った値は１０になるが、ｎ＝５からｎ＝９までの値を列記すると｛１０，９，７，３，６｝となっており、それぞれの値を１１から引いた数は｛１，２，４，８，５｝となることが判り、ロジスティック写像の式（５）の位相に当てはめることで、ロジスティック写像は周期長５で繰り返すことが確認される。
【００５０】
上記の例では素数１１を法とした場合を示したが素数を変数Ｐで表すとロジスティック写像とテント写像はＰ＝１１のため、“（Ｐ−１）／２＝５”の周期で繰り返されることが判る。
しかしながら、図８の素数｛７，１７，３１，４１，４３｝に注目すると素数Ｐとしたときの最大周期が“（Ｐ−１）／２”を採らないことが確認できる。例えば“４３”ではテント写像の式（８）の最大周期は（４３−１）／２＝２１の周期長で１〜２１の数値をそれぞれ１回ずつ周期内で一様性確保のために取得したいところだが周期長が７となっており｛１，２，４，８，１６，１１，２１｝で１に戻り繰り返されるため１〜２１の数値が全て一様に採れないことが確認できる。
【００５１】
このため、最大周期長（Ｐ−１）／２で１度採った値は２度と採ることが無い一様な値が採れることを保証できるよう以下の実施形態２のようなアルゴリズムを採用する。
【００５２】
＜実施形態２＞  最大周期にて一様性を満たす素数を選別
本実施形態においては、図１Ａに示したテント写像パラメータ選択手段２０は、（Ｐ−１）／２が素数であることを最大周期長の条件としてＰを選択することを特徴とする。
図８では、式（８）の各素数Ｐを当て、初期値Ｘ0＝１から始めたテント写像の反復毎の“Ｘi”ｏｒ“Ｐ−Ｘi”を示している。上記で説明した通り、ロジスティック写像とテント写像が位相共役の関係にあることから、周期長は“（Ｐ−１）／２”で“Ｘi＝１”に戻ることが全ての素数において生じていると確認できる。
【００５３】
しかしながら、一様な乱数列を取得したいという要望から、“（Ｐ−１）／２”を最大周期とした場合に、１度採った値は２度と採ることが無いような数列を得たいものである。例えば、Ｐ＝４３の数列は（４３−１）／２＝２１の周期内で数列が｛１，２，４，８，１６，１１，２１｝となる周期長７の周期となり、周期長２１で一様な数列となっていない。
【００５４】
ここで、試しにその数列で採ることが無かった初期値Ｘ0＝３を設定した場合、｛３，６，１２，１９，５，１０，２０｝という周期７の数列となる。１つ目と２つ目の数列で採っていない値を調べると、“初期値Ｘ0＝５”が当て嵌まることが判り、この数列は｛５，１０，２０，３，６，１２，１９｝という周期長７の数列であり、この３つを合わせれば１〜２１の数値を１つずつ採ることができる。
【００５５】
また、Ｐ＝４３のとき、の“（Ｐ−１）／２”は２１となるが、２１を素因数分解すると、“３×７”に分解され、初期値Ｘ0＝１の場合、周期長３で“Ｘ3＝１”に戻るかあるいは周期長７で“Ｘ7＝１”に戻るケースが考えられる。
ここに、テント写像の式（８）から“初期値Ｘ0＝１”の次は必ず“Ｘ1＝２”となるため、“（Ｐ−１）／２＞３”であれば周期長１は有り得ない。また、上記で説明したようにフェルマーの小定理の式（７）により、周期長“Ｐ−１”にてＰで法（ｍｏｄｕｌｏ）を採った値は必ず“１”をとる。
【００５６】
このため、“（Ｐ−１）／２”が素数ではなく合成数のとき、素因数分解を行いその素因数で“（Ｐ−１）／２”を割ってみることで、割った周期長の短い周期が存在する可能性が推測される。しかし、“（Ｐ−１）／２”が素数であれば周期は最大“（Ｐ−１）／２”を採り一様な数列を得ることが保証できる。なぜなら、“（Ｐ−１）／２”が何れかの素因数で割り切れるならば割った周期長で何回か周回して“１”に戻っている可能性はあるが、割り切れない数値（２以上の素数）であれば、“（Ｐ−１）／２”より小さい周期に分解できない構造となり、“（Ｐ−１）／２”で“１”に戻ることが推測される。上記で位相共役の関係を示したが、フェルマーの小定理から周期は“Ｐ−１”にてＰで法（ｍｏｄｕｌｏ）を採った値は必ず“１”に戻るからである。
【００５７】
つまり、“（Ｐ−１）／２”が素数ならば初期値Ｘ0＝１から始めて、この周期内でＸi＝１を採ることは無く、Ｘp-1で周回して元の値Ｘp-1＝１に戻る。ここで素因数として、Ｐ＝３７を例にとると“（Ｐ−１）／２＝１８”であり、１８を素因数分解すると“２×３×３”となる。従って、素因数として２，３が挙げられ、周期を調べるときは“（Ｐ−１）／２＝１８”を素因数２で割ると９となり周期長９を持つ可能性があり、他の素因数３では“（Ｐ−１）／２＝１８”を割ると６となるため周期長６を持つ可能性があると推量できる。
【００５８】
以上から、“（Ｐ−１）／２”が素数であれば周期内で１度出力された数は２度と出力されない一様な数列を得ることができる。図１Ａに示すテント写像パラメータ選択手段２０の第１の実施形態が行う処理に相当する図９のフローチャートに示すように、“（Ｐ−１）／２”が素数であるかを判定して素数であればその値を採用し、式（８）に適用する。式（８）を実行して周期長“（Ｐ−１）／２”の数列を出力した後に、“Ｐ”かつ“（Ｐ−１）／２”が素数となる別の素数Ｐを選定して式（８）により周期長“（Ｐ−１）／２”で数列を出力することを繰り返し行っていくことで最大周期長が保証され、かつ一様な値を連続して出力可能となることが了解される。
【００５９】
図１０に、素数Ｐが行方向の値を採るときの“（Ｐ−１）／２”の値、“（Ｐ−１）／２”が素数であるか否かの情報（素数である場合に「（Ｐ−１）／２が素数」欄に“○”をつけた）、“（Ｐ−１）／２”の素因数分解した結果値などを一覧としたテーブルを示す。この図１０に示されている素数は、「エラストテネスのふるい」というアルゴリズムを利用して素数判定して得たものである。本実施形態は、“（Ｐ−１）／２”が素数であるか否かを判定し、素数である場合に写像演算を行って乱数列出力するアルゴリズムを採用する。１つの素数を用いた写像演算では“（Ｐ−１）／２”回のテント写像演算が行われ、この写像演算が終了となると、図１０の「（Ｐ−１）／２が素数Ｐ」欄において次に“○”が付されている素数候補を採用し、また“（Ｐ−１）／２”回の写像を行い乱数出力する構成とすることができる。以上のように、“（Ｐ−１）／２が素数”という判定基準は、素数Ｐがテント写像の最大区間［０，１］をＰ倍する値Ｐとして採用できるか否かの判定基準であるということができ、「テント写像の最大区間の倍化値として採用の判定基準」と言うことにする。
【００６０】
○乱数生成方法
ここで、乱数生成方法について触れる。即ち、図１Ａにおける乱数生成手段３０の具体的動作例を示す。
式（８）のテント写像Ｘiの値そのものを乱数として用いることを考える。この場合には、演算を初期値Ｘ0＝１から始めて“Ｘ1＝２，Ｘ2＝４，・・・”という数列が得られる。即ち、２を掛け算した結果に限られるため、乱数として利用するには数列のパターンが周期毎に限られてしまい乱数性能が悪い。このため、本実施系形態に係る図１Ａにおける乱数生成手段３０は、以下のようにテント写像のＸiから乱数を取得する方法を採用する。
【００６１】
特開２０１６−０３９４１８号公報には、テント写像によるＡ／Ｄ変換回路が紹介されている。この公報に記載の手法は、初期値Ｘ0の区間［０，１］を均等に分けた写像の反復毎に“Ｘi”が０．５未満のときビット“０”を取得し、“Ｘi”が０．５以上のときにビット“１”を取得し、連続して得られた初期値Ｘ0に相当するビット列を得るというものである。このため、出力された数列をそのまま乱数として利用するのではなく、“Ｘi＜０．５”のときはビット“０”を抽出し、“０．５≦Ｘi”のときにはビット“１”を抽出する規則にて１ビットずつを連続してビット列を得て乱数列とする手法が考えられる。つまり、第１の乱数生成法は、テント写像による写像結果を順次並べて、乱数とするものである。この手法によれば、初期値Ｘ0の採り方次第で乱数検定に合格するであろうと推測できるため、予め乱数検定に合格する初期値Ｘ0を設定すれば良いことになる。しかしながら、写像の度に１ビットずつのみの乱数抽出を行う手法では、乱数生成速度が遅くなる。そこで、乱数列として使える値を出力させるために図１１に示すような乱数抽出方法が考えられる。
【００６２】
図１１は、テント写像式（８）にＰ＝８３を与えるものとすると、“（Ｐ−１）／２＝４１”となって、「テント写像の最大区間の倍化値として採用の判定基準」を満たす素数である。このため周期長が４１に確定される系列となるように、図１２に示すフローチャートに示す処理を行う構成を採用することができる。即ち、ステップＳ２１に示すように、テント写像の初期値ＡＸ0と初期値ＢＸ0とを用意する。また、テント写像としては、ステップＳ２３に示す異なる２つのテント写像Ａとテント写像Ｂを用意する。このように異なる初期値Ｘ0を二つ用意したテント写像Ａとする“初期値ＡＸ0＝１”を与え、もう一方のテント写像Ｂに“初期値ＢＸ0＝２３”を与えて同時に２つ実行する（Ｓ２１〜Ｓ２３）。乱数抽出はステップＳ２２に示す基準で行う。ここでは、図１３のテント写像マップに示すように、式（８）のＰが、“Ｘi＜Ｐ／４（＝２０．７５）”のときビット“０”を出力し、“Ｐ／４（＝２０．７５）≦Ｘi＜Ｐ／２（＝４１．５）”のときビット“１”を出力し、“Ｐ／２（＝４１．５）≦Ｘi＜３Ｐ／４（＝６２．２５）”のときビット“０”を出力し、“３Ｐ／４（＝６２．２５）≦Ｘi”のときビット“１”を出力する（Ｓ２２）。図１２の例は、２つの異なる初期値Ｘ0＝１とＸ0＝２３を与えた２つの式を同時に実行して２ビット分の出力が乱数ビット列として得られた例である。つまり、この第２の乱数生成法は、２系列のテント写像の系列を備え、各系列に異なる初期値を与えてテント写像を繰り返し、各テント写像毎に１系列から１ビットずつ、合計２ビットを得る処理を繰り返し、並べて所定長の乱数列とするというものである。
【００６３】
なお、図１１では“２（Ｐ−ＡＸi）”と“２（Ｐ−ＢＸi）”の結果は数列が１〜４１を各一回採っていることが判るように、“（Ｐ−ＡＸi）”もしくは“（Ｐ−ＢＸi）”の値をＡＸiもしくはＢＸiの列として表示している。
このようにＸiをそのまま乱数として利用するのではなく、Ｘiからビット抽出を行い、初期値Ｘ0が異なる系列を並列（同時）に計算を実行することで、素数Ｐに応じる周期長が確定し、一様な値を保証できる乱数パターンがよりバリエーション多く生成可能となる。
【００６４】
他の実施形態を説明する。異なる初期値Ｘ0を３つ与え、式（８）を並列に３つ実行するものである。１つ目の初期値Ｘ0では下位ビット桁２番目と６番目から２ビット抽出、２つ目の初期値Ｘ0では下位ビット桁４番目と７番目から２ビット抽出、３つ目の初期値Ｘ0では下位ビット桁１番目と３番目と５番目と８番目から４ビット抽出する。これら３つの出力を、図１の乱数抽出部で合わせて８ビット分を出力することで、より分散された乱数を得ることが期待できる。なお、桁数は式（８）より写像は閉区間［１，Ｐ−１］の最大値Ｐの桁で包含できることが前提である。このため、初期設定値として並列（同時）に式（８）を演算する数とそれぞれの初期値Ｘ0、乱数を抽出するビット桁が設定値として挙げられる。つまり、第３の乱数生成法は、３系列のテント写像の系列を備え、各系列に異なる初期値を与えてテント写像を繰り返し、各テント写像毎に第１の系列から所定ビット、第２の系列から所定ビット、第３の系列から所定ビットを得て、並べて所定長の乱数列とするというものである。即ち、１回の写像により所定長の乱数列を得るものである。なお、系列は３以上であっても良いことは勿論である。
【００６５】
更に、素数Ｐの切り替わりで、これらの初期設定を変更することで乱数のバリエーションを加えられるようにしても良い。図１４に示すように例えば素数Ｐ＝８３を２進数展開すると“（１０１００１１）2”となるが、このビット情報から下位４ビット分“（００１１）2”を抽出し、式（８）においてＰ＝８３とし、更に初期値Ｘ0＝１を設定して式（８）の反復演算を行う。各“Ｘi”から図１４の“Ｘi”の下位４ビット”の列のように４ビットを取り出し、素数８３から取った下位４ビット分“（００１１）2”と排他的論理和を行い図１４の一番右の列のように乱数として取り出す。このように素数が変更される度に、変更された素数からビット桁を抽出することで、乱数値としてバリエーションを増やしていくことが考えられる。この第４の例は、４ビットであるから、２回の写像により所定長ビットを得るようにすることができる。また、第１〜第３の乱数生成法において、素数Ｐから所定ビットを取り出し、各系列の写像値との排他的論理和を得て、これを第１〜第３の乱数生成法によって並べるようにしても良い。また、上記Ｐの値の一部に限らず、上記Ｐの値の全部と各系列の写像値との演算（排他的論理和に限定されない）を行っても良い。
【００６６】
また、上記の実施形態では、乱数生成において周期長“（Ｐ−１）／２”を保証する数列を採るために、Ｐ／２≦Ｘiの場合（Ｐ−Ｘi）の値から乱数を取得するが、人為的に周期長を２倍した“Ｘi”を採ることも可能である。例えば、図８の素数１１を例にとると、数列は｛１，２，４，３，５｝の周期長となっているが、Ｐ／２≦Ｘiの場合に（Ｐ−Ｘi）を採るのではなく第一順目はＸiをとると、数列は｛１，２，４，８，６｝となる。そして、テント写像において周期が一順した後に、Ｐから第一順目の数列全ての引き算を行って数列｛Ｐ−１，Ｐ−２，Ｐ−４，Ｐ−８，Ｐ−６｝を得る。ここで、Ｐ＝１１を当て嵌めると｛１０，９，７，３，５｝となり、上記第一順目の結果と合わせて｛１，２，４，８，６，１０，９，７，３，５｝と言う周期長１０を採ることができる。他のＰ値にも適応すれば周期長“Ｐ−１”を採れることが考えられ、周期長を２倍にした数列を取得しそれらから乱数列を取得できる。この第５の乱数生成法は、第一周期分の写像値の数列を得た後に、１周期分の写像値の数列を「テント写像の最大区間の倍化値として採用の判定基準を満たす素数Ｐ」から引いて第２の数列を求め、第一周期分の写像値の数列に上記第２の数列をつなげて並べ、この並べたものから所定長分を取り出すものである。取り出し方は、予め用意した位置（数列の位置）から所定長を取り出す（末尾の数を取り出しても所定長とならぬ場合には数列の先頭へ戻って取り出しを行う）。この処理を１周期毎に素数Ｐを変えて行う。
【００６７】
なお、各実施形態において、素数Ｐの選択切り替えは昇順に選択していく方法が考えられる。例えば、乱数のバリエーションを増やすために昇順をいくつかを飛ばして選択する、飛ばす個数をそれまで出力した乱数を用いて毎回変動する方法などが乱数性向上させる手法として考えられる。また、擬似乱数生成装置としては、上記各乱数生成手法をすべて備え、オペレータやユーザが１つの手法を選択するようにしても良い。
【００６８】
＜実施形態３＞  最大周期にて一様性を満たす素数を数式により選別
実施形態２では“（Ｐ−１）／２”が素数でない場合はスキップし、“（Ｐ−１）／２”が素数であるか探索し、１周期内で１度出力された数は２度と出力されない数列をテント写像の反復から得るアルゴリズムであった。ところが、図８のテント写像の列では“（Ｐ−１）／２”が素数とならない数値１３、数値１９、数値２９、数値３７において、周期長が“（Ｐ−１）／２”となっていることが確認できる。このように、“（Ｐ−１）／２”が素数でなくとも、１周期内で１度出力された数は２度と出力されない数列を得ることができる数値が存在することが判る。そこで以下に、これらを乱数生成に利用できるようにアルゴリズムを採用する。
【００６９】
本実施形態に係るテント写像パラメータ選択手段２０は、（Ｐ−１）／２を素因数分解して求めた素因数Ｃｍにより算出された周期長候補Ｋｍが、Ｋｍ≦（ｌｏｇ2Ｐ−１）が成り立つことを最大周期長の条件としてＰを選択することを特徴とする。更に、本実施形態に係るテント写像パラメータ選択手段２０は、２Km±１≡０（ｍｏｄ  Ｐ）の成立を判定し、成立する場合には当該Ｐを用いないこと構成とすることができる。
【００７０】
テント写像式（８）の振る舞いに着目し、テント写像の初期値Ｘ0＝１から始めて“Ｐ−Ｘi＝１”に戻るときの周期の長さを、図８の“素数Ｐ＝７”の例にトレースして見積る数式を考える。最初に、式（８）において、素数Ｐ＝７、初期値Ｘ0＝１を設定して開始する。
【００７１】
図１５に計算の流れを示す。式（８）に着目するとＰ／２＝３．５以上のとき、“７−Ｘi”を実行するため３．５以上になるまで２のべき乗を実行する。Ｘ0＝１のためＸ1＝２（＝２Ｘ0），Ｘ2＝４（＝２Ｘ1）にて“７−Ｘ2”が実行される。
【００７２】
図１５では“Ｘ2＝７−２2”で示され、ここでの２の指数を“ｚ1＝２”と示す。Ｘ2＝３となり再び“７−Ｘi”を実行するため３．５以上になるまで２のべき乗が実行されるため、Ｘ3＝２1×３＝６（＝２Ｘ2）にて“７−Ｘ2”が実行され“７−６＝１”になり初期値Ｘ0＝１に戻るため、周期長３で式（８）が繰り返されることが判る。ここで、２の指数ｚ2＝１となる。
【００７３】
以上の流れを代数式に当て嵌めると、
７−２1（７−２2）＝１
が成り立つことがわかる。ここで素数７を変数Ｐ、指数を図１５に示すようにｚ1（＝２），ｚ2（＝１）を使用すると、
【数１２】
2020042453.tif 000014
【００７４】
となり展開すると、
【数１３】
2020042453.tif 000015
【００７５】
が得られ、Pでくくり変形すると以下の式（９）を最終的に得る。
【数１４】
2020042453.tif 000016
【００７６】
また、もう一例として素数Ｐ＝４３、初期値Ｘ0＝１を設定して同じくＸi＝１に戻るまでをトレースする。図１６に計算の流れを示す。式（８）に着目すると、Ｐ／２＝２１．５以上のとき、“４３−Ｘi”を実行するため２１．５以上になるまで２のべき乗を実行する。
【００７７】
Ｘ0＝１のため、“Ｘ1＝２（＝２Ｘ0），Ｘ2＝４（＝２Ｘ1），Ｘ3＝８（＝２Ｘ2），Ｘ4＝１６（＝２Ｘ3），Ｘ5＝３２（＝２Ｘ4）”にて“４３−Ｘ5”が実行される。図１６では、“Ｘ5＝４３−２5”で示され、ここでの２の指数を“ｚ1＝５”と示す。Ｘ5＝１１となり、再び“４３−Ｘi”を実行するため、２１．５（４３／２）以上になるまで２のべき乗が実行される。このため、Ｘ6＝２1×１１＝２２（＝２Ｘ5）にて“４３−Ｘ6”が実行され、“４３−２1×１１＝２１”になり、ここでの２の指数を“ｚ2＝１”と示す。
【００７８】
次の“４３−Ｘi”の実行は、Ｘ7＝２1×２１＝４２（＝２Ｘ6）となり、“４３−Ｘ7”が実行されて“４３−４２＝１”になり、ここでの２の指数を“ｚ3＝１”とする。初期値Ｘ0＝１に戻るため周期長７で式（８）が繰り返されることが判り、周期長７＝ｚ1＋ｚ2＋ｚ3（＝５＋１＋１）として表せられる。
【００７９】
以上の流れを代数式に当て嵌めると、
４３−２1（４３−２1（４３−２5））＝１
が成り立つ。同様に素数４３を変数Ｐ、指数を図１６に示すようにｚ1，ｚ2，ｚ3を使用すると、
【数１５】
2020042453.tif 000017
【００８０】
となり展開すると
【数１６】
2020042453.tif 000018
【００８１】
が得られ、Ｐでくくり変形すると以下の式（１０）を最終的に得る。
【数１７】
2020042453.tif 000019
【００８２】
以上テント写像式（８）にて初期値Ｘ0＝１を当て嵌め、Ｘi＝１に戻るまでをトレースした。
次に“ｚ1，ｚ2，ｚ3，…，ｚr-1，ｚr”である数列を仮定して式（９）と式（１０）より、この後に示す式（１１）にできることが予測できる。ここで、
【数１８】
2020042453.tif 000020
【００８３】
として式を展開したものが、
【数１９】
2020042453.tif 000021
【００８４】
になり、最後の項“（−１）r”についてはｚrの添え字“ｒ”が奇数のとき、“−２Zm”であり、偶数のとき“＋２Zm”になることが式（９）と式（１０）からも読み取れる。最終的には以下の式（１１）が得られる。
【数２０】
2020042453.tif 000022
【００８５】
“Ｚｍ”は上記で示したようにＰを素数として、“（Ｐ−１）／２”を素因数分解したときに得られる素因数で“（Ｐ−１）／２”を割ったときの値がテント写像式（８）の周期長“Ｚｍ”となっている可能性がある。例えば、Ｐ＝４３の場合に（Ｐ−１）／２＝２１となり、これを素因数分解すると素因数は“３”，“７”の２つが得られる。得られた素因数“３”，“７”で“（４３−１）／２”を割る。
【００８６】
すると、（４３−１）／２／３＝７と（４３−１）／２／７＝３になるため、“Ｚｍ”として数値７，数値３が当て嵌められ、Ｐ＝４３を式（８）に代入して写像を反復すると周期長が７か３になる可能性があることが判る。実際は図８のＰ＝４３を見ると周期長７で写像が反復していることが判る。ここでＺｍは、を式（８）による演算を行うときに生じる２の冪乗の指数の和であり、式（１０Ａ）により表わされる。従って、Ｚｍの添字ｍに数値を入れた表現で“（Ｐ−１）／２”の素因数を表現すると、式（１０Ａ）の２の冪乗の指数と混同を生じるので、以下“（Ｐ−１）／２”の素因数或いは周期長を表現するときには“Ｋｍ（ｍ＝１，２，３、・・・）”と表現する。
【００８７】
ここで、周期長についてＸ0＝１から始めた場合を考えると、式（８）から２s+1（“ｓ＋１”とプラス１であるのは、“Ｐ−Ｘi＝１”のときＸi＝２から始まるため１追加しておく）がＰまで最低限確保される周期長は、“ｓ”以上のときになることが保証される。なぜなら“Ｐ−Ｘi”の演算を行うまでＸiがＰ未満のときになるため、それまで“２s+1”の演算を行えるからである。このため最低限の周期長は“２s+1＜Ｐ”まで採れることになり、２を底とする対数を採ることで、次の式（１２）が得られる。
【数２１】
2020042453.tif 000023
【００８８】
Ｐ＝４３の場合、ｌｏｇ2Ｐ＝５．４２６２６５であるため、“ｓ＝４”（２4+1＜４３）となるため、周期長は最低４以上となる。従って、周期長Ｋｍの候補はＫ1＝７，Ｋ2＝３であるが、Ｋ2＝３は（周期長３はあり得ないことがわかり）除外対象となる。このように“（Ｐ−１）／２”をそれぞれの素因数で割るときは、小さい素因数から割って求めた周期長候補のＫｍを（大きい順番に）算出し、式（１２）より“Ｋm≦ｓ”になる場合は除外しても良いことが判る。
【００８９】
式（１１）から左の式の計算結果は必ず整数を採るため、右の計算では素数Ｐで割った値は余りの生じない割り切れる数になることが判る。このためテント写像式（８）より“（Ｐ−１）／２”を素因数分解して得られた素因数で割った周期長の候補をＫｍとするとき、式（９）と式（１０）の形態から以下の式（１３）が与えられる。
【数２２】
2020042453.tif 000024
【００９０】
式（１３）が成り立たつとき、式（８）の周期長は“（Ｐ−１）／２”より小さいものが存在するといった定理が導かれる。
テント写像の式（８）では、“Ｋｍ＝（Ｐ−１）／２”のときは写像の値Ｘiは元に戻るため“２Km＋１”あるいは“２Km−１”のどちらかが必ず素数Ｐで割り切れる。因みに、このときは下記のオイラーの基準と同等であることが判る。
【００９１】
＜オイラーの基準＞
“Ｐ”を素数とし，“ａ”と“Ｐ”が互いに素な整数とするとき，以下が成り立つ。
【数２３】
2020042453.tif 000025
【００９２】
ルジャンドル記号と言われ、初等整数論の基本定理として取り上げられておりここでは詳細な説明は割愛するが、“ａ”が“ｍｏｄ  Ｐ"で平方剰余のとき“＋１”、“ａ”が“ｍｏｄ  Ｐ"で平方非剰余のとき“−１”を採ることが知られており、次の式が成り立つ。
【数２４】
2020042453.tif 000026
【００９３】
式（１３）で“Ｋｍ＝（Ｐ−１）／２”、“ａ＝２”としたものと同じとなることが判り、整数演算化したテント写像式（８）の周期においてオイラーの基準が当て嵌まることが判る。
【００９４】
テント写像式（８）による乱数生成では、周期長“（Ｐ−１）／２”となる素数Ｐを選択して一様な“Ｘi”を取得したいため、式（１３）が成り立つかを確認して、余り（ｍｏｄｕｌｏ）が“０”になる場合は“（Ｐ−１）／２”より短い周期長が存在することが判ることから、その素数Ｐを除外することができる。次の素数候補を取得して再び短周期があるかをチェックすることで周期長が“（Ｐ−１）／２”となるかを調べて、周期が“（Ｐ−１）／２”であることを保証できればその素数Ｐを採用し乱数を生成して行けば良い。
【００９５】
図１７に、式（１２）によるあり得ない短い周期を除外する判定を含めたＰ選択処理の実施形態のフローチャートを示す。このＰ選択処理は、第２の実施形態である“（Ｐ−１）／２が素数”という条件が満たされている場合には、このＰを選択するようにしている。即ち、図９に示したフローチャートの処理を含むものである。
【００９６】
以下、図１７のフローチャートを参照してＰを選択する処理を説明する。まず、任意の素数をＰとして取り込む（Ｓ３１）。次に、“（Ｐ−１）／２” が素数であるかを検出する（Ｓ３２）。ここでＹｅｓとなると、この値のＰを採用する。ステップＳ３２においてＮｏとなると、“（Ｐ−１）／２”を素因数分解し、素因数Ｃｍを算出する（Ｓ３３）。
【００９７】
次に、求めた各々の素因数Ｃｍで“（Ｐ−１）／２”を割算し、周期長候補Ｋｍを求める（Ｓ３４）。ここに、周期長Ｋｍは、
Ｋ1＝（Ｐ−１）／２／Ｃ１
Ｋ2＝（Ｐ−１）／２／Ｃ２
Ｋ3＝（Ｐ−１）／２／Ｃ３
・・・・・・・・・・・・・
Ｋm＝（Ｐ−１）／２／Ｃｍ
【００９８】
次に、Ｋｍ≦ｌｏｇ2Ｐ−１が成り立つかを調べる（Ｓ３５）。Ｎｏとなると、
２Km±１≡０（ｍｏｄ  Ｐ）の成立を判定する（Ｓ３６）。ここで、Ｎｏとなると、Ｋｍのｍを１インクリメントし（Ｓ３７）、ステップＳ３５へ戻って処理を続ける。
【００９９】
また、ステップＳ３６においてＹｅｓとなると、ステップＳ３１へ戻って次の素数を“Ｐ”として、選択して処理を続ける。また、ステップＳ３５においてＹｅｓとなると、この値のＰを採用する。
【０１００】
上記ステップＳ３２においてＹｅｓとなった場合のＰと、上記ステップＳ３５においてＹｅｓとなった場合のＰが、乱数生成に必要な数だけ収集されると、この図１７の処理は停止され。ここで選択されたＰを用いた乱数生成へと処理が進められる。
【０１０１】
図１７の判定フローチャートによる処理プログラムを実装し、“（Ｐ−１）／２”が素数とならない場合、“（Ｐ−１）／２”を素因数分解してＫｍを求め、式（１３）により短周期が存在するかを調べることができる。ここで、“（Ｐ−１）／２”より短い周期があると判定された素数Ｐの結果が、図１０において“×”によって示されている。図１０における２Km±１の欄は式（１３）により素数Ｐで法（ｍｏｄｕｌｏ）を取った結果、余りが“０”となったときの数値Ｋｍを示している。
【０１０２】
判定の結果、図１０における上記欄に示されるマークが“○”となった素数Ｐ使って、式（８）のテント写像による反復演算を行い周期長“（Ｐ−１）／２”が保証された“Ｘi”を出力して乱数生成を行うことができる。実施形態２と比較して、Ｋｍの算出と式（１３）による周期長と一様性が保証できる素数Ｐであるか確認する計算を要する。しかしながら、利用できる素数を増すことができるため、素数の選択の範囲を広げて多くの素数が使えるといったメリットが得られる。
【０１０３】
式（１３）では、２のべき乗になるため指数が大きくなるほど桁数は莫大になるが２進数では指数分を左シフトで行えば良く、素数Ｐを２進数展開してビット値同士の割り算を行い割り切れるか否か（余りが出ないか）を確認すれば良い。従って、コンピュータ実装での計算を考えるならば、割り算は引き算の演算を実装すれば良いため計算量はそれほど問題とならないと推測される。
【０１０４】
また、指数が大きいほど桁が莫大になるが、合同算術では法（ｍｏｄｕｌｏ）を採ることにより、或る値Ｑ同士を掛け算した結果の余りにもう一度或る値Ｑを掛け算して余りを出すと、元の掛け算（Ｑ3）の余りに等しくなるといった性質があり、桁を抑えて演算できる。この手法を図１８に示す。
【０１０５】
例として図１０の“素数Ｐ＝４１”の行の２Km±１の欄から２7＋１の結果は、素数Ｐ＝４３で割り切れることを示している。
つまり、２7＋１≡０（ｍｏｄ４３）であるため、正直に指数をかけた場合は、１２９≡０（ｍｏｄ４３）と１２９を４３で割った余りを出すことになる。ここで、上式において“＋１"を右辺に移項すると２7≡−１（ｍｏｄ４３）となる。この式で“−１"は“４３−１"を意味するため２7≡４２（ｍｏｄ４３）であるかを確認するために、図１８に示すように１を余りに対し２を掛け算して、法（ｍｏｄｕｌｏ）を採り、一つ一つ計算してゆくことで桁数を増やさずに演算できるのである。
【０１０６】
但し、大きな桁の素数同士の掛け算による合成数は、桁が大きいほど素因数分解の計算に莫大な時間がかかるとされている。従って、現実的には、現在のコンピュータでそれほど計算時間がかからない程度の桁数の素数を選択することが推奨される。
【０１０７】
従来のカオスを利用した疑似乱数系列は、一様性の面では理論的な構築がなされておらず、数値に偏りが起こる懸念があった。これに対し上記に示した実施形態は、周期が見積ることができるようになったことで、一様性が保証でき良質な疑似乱数列を生成できる効果を奏する。
【０１０８】
更に、上記実施形態では、一周期内で一様性を保証できる素数か確認し、その素数を用いて乱数列を出力し、周回したら一様性を保証する別の素数を採用して乱数列を生成して行くものである。このため、素数は無限に存在することが知られており、実質的に際限のない周期長を持った疑似乱数列を生成することが可能となるという効果を奏することが期待できる。
【０１０９】
以上の実施形態の疑似乱数生成装置は、全て図１Ｂに示すフローチャートに対応するプログラムによりコンピュータが処理を行うものとして実現できる。以下、この図１Ｂを用いて動作説明を行う。まず、取得する（生成する）乱数の容量（乱数列長）“Ｍ”を設定する（Ｓ１１）。
【０１１０】
次に、“Ｐ”として素数を取得し、この“Ｐ”が、テント写像を行ったときに最大周期“（Ｐ−１）／２”を実現する数値であるものを設定する（Ｓ１２）。次に、テント写像に最大演算精度Ｐと初期値Ｘ0を設定し、レジスタｉを０に設定する（Ｓ１３）。次に、テント写像演算の結果が出ていなければステップＳ１４をスキップして、ステップＳ１５のテント写像演算を実行する（Ｓ１５）。このステップＳ１５においては、レジスタｉの値を１インクリメントし、レジスタｊの値をＬインクリメントしておく。ここに、Ｌは１回の乱数演算結果を用いて作成される乱数の長さを示す。
【０１１１】
次に、レジスタｉの値が“（Ｐ−１）／２”となったかを検出し（Ｓ１６）、Ｎｏとなると既に説明した乱数生成手段３０による乱数生成処理が行われる（Ｓ１４）。ステップＳ１４からステップＳ６までの処理の繰り返しによって１周期分のテント写像が終了すると、ステップＳ１６においてＹｅｓへ分岐し、レジスタｊの値が乱数の容量（乱数列長）“Ｍ”を超えたかを検出し（Ｓ１７）、ＮｏとなるとステップＳ１２へ戻って処理が続けられ、ステップＳ１７にてＹｅｓとなると処理を終了する。
【符号の説明】
【０１１２】
１０  テント写像演算手段
２０  テント写像パラメータ選択手段
３０  乱数生成手段
４０  パラメータ遷移制御手段
【図１Ａ】
2020042453.tif 000027
【図１Ｂ】
2020042453.tif 000028
【図２】
2020042453.tif 000029
【図３】
2020042453.tif 000030
【図４】
2020042453.tif 000031
【図５】
2020042453.tif 000032
【図６】
2020042453.tif 000033
【図７】
2020042453.tif 000034
【図８】
2020042453.tif 000035
【図９】
2020042453.tif 000036
【図１０】
2020042453.tif 000037
【図１１】
2020042453.tif 000038
【図１２】
2020042453.tif 000039
【図１３】
2020042453.tif 000040
【図１４】
2020042453.tif 000041
【図１５】
2020042453.tif 000042
【図１６】
2020042453.tif 000043
【図１７】
2020042453.tif 000044
【図１８】
2020042453.tif 000045