• ベストアンサー

混合合同法による一様乱数

noname#108554の回答

  • ベストアンサー
noname#108554
noname#108554
回答No.1

>何をLでわるのですか? a*Xn + bを割ってください。 >bには何を初期値として入れればいいのですか? webで探しても別に制限が無いので なんでもいいんじゃないでしょうか? 0はまずいでしょうけど。

関連するQ&A

  • 合同混合法・乗算合同法の実際の周期について

    現在「混合合同法」と「乗算合同法」を用いた乱数の発生実験を以下のような条件で行っております。その中でいくつか疑問点が出てきたので質問いたします。 「混合合同法」 R(i+1)=R(i)*A+C (modM) A=1229 C=351750 M=1664501 R(0)=1 「乗算合同法」 R(i+1)=R(i)*A(modM) A=48828125(=5^11) M=2^31 R(0)=584287 これらの実験を行う中で周期をMに設定しているのに、実際に同じ値が返されてくるまでの周期が「混合合同法」では約半分、「乗算合同法」では約四分の一になっております。なぜこのようになるのでしょうか? また乗算合同法では奇数しか返されないのですがこの理由と、奇数しか返されないことで起こる不都合もお教えください。 なお、これはCでプログラミングしているのですが同一の値が返される回数を簡単に表示するようにするにはどのようにプログラムすればよいでしょうか?ご助言ください。

  • 線形合同法(乗算型)による乱数発生法

    javaを使って乱数を発生するプログラムを作っています。 線形合同法(乗算型)に基づいて発生させようと思うのですが、疑問点があり質問しました。 乱数発生の漸化式 X(i+1)= a*X(i) (mod M) で、a,M,そして乱数の初期値を決めたいのですが、ネットを使って調べたところ、 a=16807 M=2147483647 が良いという記述がありました。 しかし、これをプログラムに反映させるとintの範囲から出てしまうため、検出値にマイナスが入ってしまいます。 また乱数の初期値に関する記述が見つからなかったので、どのような値にすべきか悩んでいます。 また、検出値をある範囲に(例えば100000まで)にしたい場合は、M=100000にすればいいと思うのですが、その場合のaや初期値の値はどのように決定したらよいのでしょうか? 教えて下さい。よろしくお願いします。

    • ベストアンサー
    • Java
  • 線形合同法について

    線形合同法のRi+1=(a×Ri×b)=mod cなんですがa=5 b=3 c=8とするとき1回目=0 2回目=3 3回目=2 4回目=5となるとかいてあるのですがなぜこうなるのかがわかりません。特にmodがどういう意味なのかがわかりません。よろしければ教えてください。

  • 合同式がわかりません

    合同式について 473^5 ≡ 3^5 ≡ 3^3 × 3^2 (mod5) ここで 3^3 ≡ 27 ≡ 2 (mod5) 3^2 ≡ 9 ≡ 4 (mod5) より 473^5 ≡ 2×4 ≡ 8 ≡ 3 (mod5) よって473^5を5で割った余りは3である と書かれているのですが 理解できない部分があります。 a≡b (mod n), c≡d (mod n) のとき ac≡ bd (mod n) という公式を使って (3^3)*(3^2) ≡ 2*4 (mod 5) となる。 というのは教えてもらって理解できたのですが その後 473^5 ≡ 2×4 ≡ 3 (mod5) このような形にしていいのは何故なのでしょうか くだらない質問かもしれませんが よろしくお願いします。

  • 合同について

    合同の定義は 整数aとbの差がmの倍数であるとき、aとbはmを法として合同 整数aとbをある整数mで割った時の余りが等しいとき、aとbはmを法として合同 このように二つありますが 実際に 4を3で割ると1余る 7を3で割ると1余る 10を3で割ると1余る そして10-7=3 7-4=3 10-4=6 と全て3の倍数になる。 となるというのはわかるのですが なぜ 整数aとbの差がmの倍数であるとき、mで割ったaとbの余りが同じになるのでしょうか。 そうなるものだから、と考えるしかないのでしょうか。 なぜうまい具合にそうなるのか理解できず、すっきりしません。 よろしくお願いします。

  •  線形合同法の欠点について

     線形合同法の欠点について  wikipediaで線形合同法(http://ja.wikipedia.org/wiki/%E7%B7%9A%E5%BD%A2%E5%90%88%E5%90%8C%E6%B3%95)の欠点の項目を見ると、 『最下位ビットは、同じものが出続けるか、0と1が交互にでるかのどちらかである。これは、最下位ビットが結果的に、奇数か偶数かを示しているため、偶数ばかりが出る、奇数ばかりが出る、偶数と奇数が交互に出る、という意味である。』  と書いているのですが、生成の例を見ると「奇数(3)→奇数(1)→偶数(8)」と結果が出ています。欠点の項目で書かれてあることと違うじゃんと思って、この矛盾について検索しまくって調べたのですが、よく理解できませんでした。  よろしければ教えていただけないでしょうか?

  • 合同

    整数a,bに対し、差a-bが正の整数nで割り切れる時、a,とbはnを法として合同であるという。 30を法として(2^30)と合同である整数のうち最小値の正の整数を求める問題 (2^30)-n=30N (20^30)=m(mod30)の2つの表した方が分かりません。 (2^30) =(2^5)^6 =(32)^6 =(30+2)^6 から 30K+64とさらに計算して30(K+2)+4になることが分かりません。

  • 合同式の解き方を教えてください。

    解き方が別の合同式だと思うのですが、それぞれの問題の解き方を教えてください。 一つ目 次の合同式を解く、または、解けないことを証明せよ。 (a) 3x^2 - 5x + 7 ≡ 0 (mod 13) (b) 5x^2 - 6x + 2 ≡ 0 (mod 13) (c) x^2 + 7x + 10 ≡ 0 (mod 11) 二つ目 29の原始根は2であり、指数表を作り、それを使って合同式を解け。 (d) 17x^2 - 3x + 10 ≡ 0 (mod 29) (e) x^7 ≡ 17 (mod 29) これらの問題の解き方を教えてください。 よろしくお願いします。

  • 乱数について

    線形合同法が乱数生成アルゴリズムとして欠点が多いことは有名です。 http://www001.upp.so-net.ne.jp/isaku/rand.html さて、自分のPC(OSはubuntu、言語はC++です。)で、rand()を用いて、 最下位ビットが0、1が繰り返して現れるかどうかを確認しましたところ、 そんなことはありませんでした。 このことから、自分のマシンは線形合同法を用いていないと判断してよいのでしょうか? また、よろしければ、マシンがどの乱数アルゴリズムを使っているかを 調べる方法を教えてください。 先のURLでは、「/usr/ucb/cc を解析した結果、」とありますが、 そんなディレクトリはありませんでした。

  • 合同式を使って証明したいのですが・・・

    A=an、an-1、…、a1(nやn-1や1は添え字です)という数がある時、次のことを証明したいのです。 (1)Aを3で割った余り=(an+an-1+…+a1)を3で割った余り (2)(奇数桁目の合計)-(偶数桁数目の合計)=Aを11で割った余り 合同式の性質を使えば証明できるようなのですが、いまいちよく分かりません。 どなたか解き方と回答を教えて頂ければ、と思います。どうかよろしくお願いします。