মিডল-স্কোয়ার পদ্ধতি (middle-square method) র্যান্ডম সংখ্যা জেনারেট করার সবচেয়ে সহজ পদ্ধতির একটি। এই পদ্ধতিতে একই সংখ্যা বারবার জেনারেট হবে অথবা সিকোয়েন্সের পুরনো সংখ্যার দিকে ফিরে যাবে এবং অনন্ত লুপে পড়ে যাবে। n-ডিজিট র্যান্ডম নম্বর জেনারেটরের জন্য, পিরিয়ড সর্বোচ্চ n হতে পারে। যদি মিডল n ডিজিট সব শূন্য হয়, তবে জেনারেটর সদা শূন্য আউটপুট দেবে, এই শূন্য রানগুলো সহজে ডিটেক্ট করা যায় হলেও এগুলো খুব ঘন ঘন ঘটে যাতে এই পদ্ধতি প্র্যাকটিক্যাল ব্যবহারে উপযোগী নয়।
ইনপুট − র্যান্ডম নম্বরের ডিজিট দিন: 4 আউটপুট − র্যান্ডম সংখ্যাগুলো: 6383, 14846, 8067, 51524, .........
অ্যালগরিদম
শুরু middleSquareNumber(number, digit)
একটি অ্যারে ঘোষণা করুন এবং next_number = 0 অ্যাসাইন করুন
সংখ্যাকে বর্গ করুন এবং sqn ভেরিয়েবলে রাখুন
digit কে ২ দিয়ে ভাগ করুন এবং t ভেরিয়েবলে রাখুন
sqn কে a[t] দিয়ে ভাগ করুন এবং sqn-এ রাখুন
i = 0 থেকে digit পর্যন্ত
next_number = next_number + (sqn % (a[t])) * (a[i])
sqn = sqn / 10
শেষ
next number ফেরত দাও
শেষ
উদাহরণ কোড
#include <iostream>
using namespace std;
int a[] = { 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000 };
int middleSquareNumber(int number, int digit) {
int sqn = number * number, next_number = 0;
int t = (digit / 2);
sqn = sqn / a[t];
for (int i = 0; i < digit; i++) {
next_number += (sqn % (a[t])) * (a[i]);
sqn = sqn / 10;
}
return next_number;
}
int main(int argc, char **argv) {
cout << "কত ডিজিটের র্যান্ডম নম্বর চান: ";
int n;
cin >> n;
int start = 1;
int end = 1;
start = a[n - 1];
end = a[n];
int number = ((rand()) % (end - start)) + start;
cout << "The random numbers are:\n" << number << ", ";
for (int i = 1; i < n; i++) {
number = middleSquareNumber(number, n);
cout << number << ", ";
}
cout << ".........";
}
আউটপুট
কত ডিজিটের র্যান্ডম নম্বর চান: 4 The random numbers are: 6383, 14846, 8067, 51524, .........