Computer >> Máy Tính >  >> Lập trình >> C ++

Hàm băm giữa hình vuông trong C ++.

Tuyên bố vấn đề

Phương pháp giữa bình phương là một phương pháp tạo ra các số giả ngẫu nhiên. Phương pháp này được phát minh bởi John von Neumann và được mô tả tại một hội nghị năm 1949

  • Trong kỹ thuật này, một giá trị gốc ban đầu được lấy và nó được bình phương.

  • Một số chữ số ở giữa được trích xuất và những chữ số được chiết xuất này tạo thành một số được lấy làm hạt giống mới.

    • Hãy để chúng tôi lấy 3456 làm hạt giống. Hình vuông của nó là 11943936

    • Lấy 4 chữ số ở giữa làm hạt giống mới, tức là 9439. Hình vuông của nó là 89094721

    • Lấy 4 chữ số ở giữa làm hạt giống mới, tức là 0947

    • Lặp lại quá trình này

Thuật toán

1. Choose initial seed value
2. Take the square of the seed value
3. Update seed by taking n digits from previous result

Ví dụ

#include <iostream>
#include <ctime>
using namespace std;
long long getTime(){
   time_t t = time(NULL);
   struct tm *tm = localtime(&t);
   long long x = (tm->tm_hour) * 50000000 + (tm->tm_min) * 100000 + (tm->tm_sec) * 5000 +
(tm->tm_mday) * 50 + (tm->tm_year);
   return x;
}
long getHash(){
   long long key = getTime();
   key = key * key;
   key = key / 10000;
   key = key % 100000000;
   return key;
}
int main(){
   cout << "Random number: " << getHash() << endl;
   return 0;
}

Đầu ra

Khi bạn biên dịch và thực thi chương trình trên. Nó tạo ra kết quả sau−

Random number: 10088419