Phương pháp Middle Square (trung bình bình phương) là một trong những phương pháp đơn giản nhất để tạo số ngẫu nhiên. Phương pháp này sẽ hoặc lặp lại việc tạo ra cùng một số, hoặc quay về một số trước đó trong dãy và lặp vô hạn. Đối với bộ sinh số ngẫu nhiên n chữ số, chu kỳ không thể dài hơn n. Nếu n chữ số giữa đều là 0, bộ sinh sẽ xuất ra 0 mãi mãi. Mặc dù các chuỗi 0 này dễ phát hiện, nhưng chúng xảy ra quá thường xuyên nên phương pháp này không thực tế cho việc sử dụng thực sự.
Input - Nhập số chữ số cho số ngẫu nhiên: 4 Output - Các số ngẫu nhiên là: 6383, 14846, 8067, 51524, .........
Thuật toán
Bắt đầu middleSquareNumber(number, digit)
Khai báo mảng và gán next_number = 0.
Bình phương number và gán vào biến sqn.
Chia digit cho 2 và gán vào biến t.
Chia sqn cho a[t] và lưu vào sqn.
For i = 0 đến digit
next_number = next_number + (sqn mod (a[t])) * (a[i]);
sqn = sqn / 10;
Trả về next_number
Kết thúc.
Mã ví dụ
#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 << "Nhập số chữ số ngẫu nhiên bạn muốn: ";
int n;
cin >> n;
int start = 1;
int end = 1;
start = a[n - 1];
end = a[n];
int number = ((rand()) % (end - start)) + start;
cout << "Các số ngẫu nhiên là:\n" << number << ", ";
for (int i = 1; i < n; i++) {
number = middleSquareNumber(number, n);
cout << number << ", ";
}
cout << ".........";
}
Kết quả đầu ra
Nhập số chữ số ngẫu nhiên bạn muốn: 4 Các số ngẫu nhiên là: 6383, 14846, 8067, 51524, .........