কম্পিউটার টিউটোরিয়াল

C++ প্রোগ্রাম: মাল্টিপ্লাই-উইথ-ক্যারি পদ্ধতিতে র‍্যান্ডম সংখ্যা জেনারেট


মাল্টিপ্লাই-উইথ-ক্যারি (Multiply-with-Carry) পদ্ধতি মার্সাগলিয়া এবং জামান (১৯৯১) দ্বারা প্রবর্তিত অ্যাড-উইথ-ক্যারি জেনারেটরের একটি ভেরিয়েন্ট। এই পদ্ধতির প্রধান সুবিধা হল এটি সিম্পল কম্পিউটার ইন্টিজার অ্যারিথমেটিক ব্যবহার করে এবং বিশাল পিরিয়ড (২⁶⁰ থেকে ২২০০০০০০ পর্যন্ত) সহ র‍্যান্ডম নম্বর সিকোয়েন্স খুব দ্রুত জেনারেট করে।

MWC-এ বেস b কম্পিউটার ওয়ার্ড সাইজের সমান বেছে নেওয়া হয় এবং মাল্টিপ্লায়ার a এবং ল্যাগ r মডুলাস p = abʳ - ১ নির্ধারণ করে। এখানে a এমনভাবে বেছে নেওয়া হয় যাতে মডুলাস প্রাইম হয় এবং মাল্টিপ্লায়ারের দীর্ঘ পিরিয়ড থাকে।

অ্যালগরিদম

শুরু
    maximum_sequence_elements, b, r, c[maximum_sequence_elements], x[maximum_sequence_elements] ঘোষণা করুন
    maximum_sequence_elements, b, r পড়ুন
    m = rand() mod b
    c[0] = rand() mod m
    x[0] = rand() mod b
    I = 1 থেকে maximum_sequence_element পর্যন্ত
        x[i] = (m * x[i - r] + c[i - 1]) mod b
        c[i] = (m * x[i - r] + c[i - 1]) / b
        সিকোয়েন্স প্রিন্ট করুন
    শেষ
শেষ

উদাহরণ কোড

#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. রিকার্সন ব্যবহার করে প্রাকৃতিক সংখ্যাগুলোর যোগফল (Sum of Natural Numbers) বের করার C++ প্রোগ্রাম

  2. দুই সংখ্যা গুণ করার C++ প্রোগ্রাম (অপারেটর দিয়ে এবং ছাড়া)

  3. C#-এ সিকিউর র‍্যান্ডম নম্বর জেনারেট করা

  4. পাইথনে সিক্রেট ম্যানেজমেন্টের জন্য সিকিউর র‍্যান্ডম নম্বর জেনারেট করা