C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

キャリー付き倍算法を使用して乱数を生成するC++プログラム


キャリー付き倍算方式は、Marsaglia and Zaman(1991)によって導入されたキャリー付き加算ジェネレーターの変形です。この方法の主な利点は、単純なコンピューター整数演算を呼び出し、約260〜22000000の範囲の巨大な周期を持つ乱数のシーケンスを非常に高速に生成できることです。

MWCでは、ベースbはコンピューターのワードサイズと乗数aに等しくなるように選択され、ラグrはモジュラスp =ab r を決定します。 -1。ここでは、モジュラスが素数で乗数の周期が長くなるようにaが選択されています。

アルゴリズム

Begin
   Declare maximum _sequence _elements, b, r, c[maximum _sequence _elements],
   x[maximum _sequence _elements]
   Read the variables maximum _sequence _elements, b, r
   m = rand() mod b
   c[0] = rand() mod m
   x[0] = rand() mod b
   For I = 1 to maximum_sequence_element, do
      x[i] = (m * x[i - r] + c[i - 1]) mod b
      c[i] = (m * x[i - r] + c[i - 1]) / b
      print the sequence.
   Done.
End.

サンプルコード

#include <iostream>
using namespace std;
int main(int argc, char **argv) {
   int max_Seq_Elements = 7;
   int b = 300;
   int m = rand() % b;
   int r = 1;
   int c[max_Seq_Elements];
   int x[max_Seq_Elements];
   c[0] = rand() % m;
   x[0] = rand() % b;
   cout << "The random number sequence is: " << x[0];
   for (int i = 1; i < max_Seq_Elements; i++) {
      x[i] = (m * x[i - r] + c[i - 1]) % b;
      c[i] = (m * x[i - r] + c[i - 1]) / b;
      cout << " " << x[i];
   }
   cout << "...";
}

出力

The random number sequence is: 177 173 226 221 56 157 84...

  1. 安全な乱数を生成するC#プログラム

    安全な乱数を得るには、RNGCryptoServiceProviderクラスを使用します。暗号化乱数ジェネレーターを実装しています。 同じクラスを使用して、次の-を使用していくつかのランダムな値を見つけました using (RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider()) {    byte[] val = new byte[6];    crypto.GetBytes(val);    randomvalue = BitConverter.ToInt

  2. Pythonを使用してシークレットを管理するための安全な乱数を生成する

    安全な乱数を暗号的に生成するために、秘密を使用できます。 Pythonのモジュール。このモジュールは、安全なパスワード、アカウント認証、セキュリティトークン、または関連するシークレットを作成するのに役立ちます。 シークレットモジュールのクラスとモジュールを使用するには、そのモジュールをコードにインポートする必要があります。 import secrets 乱数 秘密 モジュールは、ランダム性の安全なソースにアクセスするために使用されます。これはオペレーティングシステムによって提供されます。 シークレットモジュールの乱数に関連するクラスと関数は-です。 クラスシークレット。SystemR