คำชี้แจงปัญหา
วิธี mid-square เป็นวิธีการสร้างตัวเลขสุ่มเทียม วิธีนี้คิดค้นโดย John von Neumann และอธิบายไว้ในการประชุมในปี 1949
-
ในเทคนิคนี้ จะใช้ค่าเมล็ดเริ่มต้นและยกกำลังสอง
-
ตัวเลขบางตัวจากตรงกลางจะถูกดึงออกมา และตัวเลขที่แยกออกมาเหล่านี้จะสร้างตัวเลขซึ่งถือเป็นเมล็ดพันธุ์ใหม่
-
ให้เราเอา 3456 เป็นเมล็ด สี่เหลี่ยมของมันคือ 11943936
-
เอาเลขกลาง 4 ตัวเป็น seed ใหม่ เช่น 9439 สี่เหลี่ยมจัตุรัส 89094721
-
เอาเลขกลาง 4 ตัวเป็น seed ใหม่ เช่น 0947
-
ทำขั้นตอนนี้ซ้ำ
-
อัลกอริทึม
<ก่อน>1. เลือกค่าเมล็ดเริ่มต้น2. หากำลังสองของค่าเมล็ด3 อัพเดท seed โดยเอา n หลักจากผลลัพธ์ก่อนหน้าตัวอย่าง
#include#include ใช้เนมสเปซ std;getTime ยาว (){ time_t t =เวลา (NULL); struct tm *tm =เวลาท้องถิ่น (&t); ยาว ยาว x =(tm->tm_hour) * 50000000 + (tm->tm_min) * 100000 + (tm->tm_sec) * 5000 +(tm->tm_mday) * 50 + (tm->tm_year); return x;}long getHash(){ คีย์ยาว =getTime(); คีย์ =คีย์ * คีย์; คีย์ =คีย์ / 10000; คีย์ =คีย์ % 100000000; คีย์ย้อนกลับ;}int main(){ cout <<"หมายเลขสุ่ม:" < ผลลัพธ์
เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้น มันสร้างผลลัพธ์ดังต่อไปนี้−
สุ่มเลข:10088419