• ベストアンサー

名前なのですが・・・

「線形合同法を用いた擬似乱数を発生させるために写真の式を用いた。この式を用いると0~M-1までの整数が周期Mで一回ずつ現れます。このような乱数は何と呼ばれますか?」  という問題なのですが、いろいろ調べてはいるのですがわかりません。  回答おねがいします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

http://mukun_mmg.at.infoseek.co.jp/mmg/bncpp/al013.html より引用 ★一様乱数(線形合同法)★ もっと有名で、簡単なアルゴリズムに「線形合同法」があります。   X_n = (A・X_n-1 + C) mod M 以下のページも参照 http://kodamaforest.blog112.fc2.com/blog-entry-50.html でしょうか

king156
質問者

お礼

回答本当にありがとうございます!! 詳しい説明の載ったリンクまで張っていただいて!  とても参考になりました^^ なるほど、一様乱数というのですね^^。

関連するQ&A

  • Excelで乱数発生のアルゴリズム

    今、Excelでの乱数発生に関して勉強しているものです。 プログラミングの本や、乱数の本を読んで線形合同法という漸化式が乱数発生のときに使用されているというところまで調べることはできたのですが、Excelでのアルゴリズムについてはあまり調べられなくて困っています。 知っている方がいらっしゃいましたら教えてください。 よろしくお願いします。

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

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

    • ベストアンサー
    • Java
  • 合同混合法・乗算合同法の実際の周期について

    現在「混合合同法」と「乗算合同法」を用いた乱数の発生実験を以下のような条件で行っております。その中でいくつか疑問点が出てきたので質問いたします。 「混合合同法」 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でプログラミングしているのですが同一の値が返される回数を簡単に表示するようにするにはどのようにプログラムすればよいでしょうか?ご助言ください。

  • 線形合同法

    線形合同法の周期性について教えてください。

  • 乱数について

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

  • モンテカルロ法

    自分は現在、大学の1年生です。 パソコン関係に弱く、よく分からないことが多く、 質問があるので教えて頂ければ嬉しいです 大学のレポ(宿題)で「モンテカルロ計算をする際に周期の短い疑似乱数を使うとどのような問題が生じるか説明せよ」という問題がでました。 この回の講義を休んでいたせいもあって、まずモンテカルロ計算や疑似乱数について漠然としか理解できていません。 なので簡単に解説してくれるか、もしくは参考URLを載せてくれたら嬉しいです

  • 合同

    整数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になることが分かりません。

  • 初心者です。プログラミング 3×3行列の積

    先日、課題が出されて、1週間ほど考えてはみたのですがわからなかったため質問させていただきます。 3行3列の行列の積を求めるプログラムを作成しなさい。ただし、各行列要素は疑似乱数を使って値を求めるようにしなさい。また各行列要素は二桁以下の整数とし、行列の積を計算する部分を関数で行うようにしなさい。という問題なんですが、どなたかわかる方がいらっしゃいましたらご回答よろしくお願いいたします。できれば詳しく式などを書いていただきたいです。

  • 合同について

    合同の定義は 整数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の余りが同じになるのでしょうか。 そうなるものだから、と考えるしかないのでしょうか。 なぜうまい具合にそうなるのか理解できず、すっきりしません。 よろしくお願いします。

  • 整数の求めかた

    整数a,bに対し、差a-bが正の整数nで割り切れる時、aとbはnを法として合同であるという。 30を法として2^(30)と合同である整数のうち最小の正の数はという問題なのですが (2^(30))-n=30N (2^(30))≡n(mod30) (2^(30))=30K+64 =30(K+2)+4 の意味(式)がよく分かりません