মাল্টিপ্লাই-উইথ-ক্যারি (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...