Nombor rawak dari 1 hingga 6. Penjana nombor rawak: bagaimana untuk memilih perkhidmatan yang betul

Sila bantu perkhidmatan dengan satu klik: Beritahu rakan anda tentang penjana!

Penjana nombor dalam talian dalam 1 klik

Penjana nombor rawak, yang dibentangkan di laman web kami, adalah sangat mudah. Sebagai contoh, ia boleh digunakan dalam loteri dan loteri untuk menentukan pemenang. Pemenang ditentukan dengan cara ini: program menghasilkan satu atau lebih nombor dalam mana-mana julat yang anda tentukan. Keputusan penipuan boleh segera diketepikan. Dan terima kasih kepada ini, pemenang ditentukan oleh pilihan yang jujur.

Kadang-kadang perlu untuk mendapatkan bilangan nombor rawak tertentu sekaligus. Sebagai contoh, anda ingin mengisi tiket loteri "4 daripada 35", mempercayai peluang. Anda boleh menyemak: jika anda melambung syiling sebanyak 32 kali, apakah kebarangkalian bahawa 10 terbalik akan muncul berturut-turut (kepala/ekor mungkin diberi nombor 0 dan 1)?

Arahan video dalam talian nombor rawak - randomizer

Penjana nombor kami sangat mudah digunakan. Ia tidak memerlukan memuat turun program ke komputer anda - ia boleh digunakan dalam talian. Untuk mendapatkan nombor yang anda perlukan, anda perlu menetapkan julat nombor rawak, kuantiti dan, jika dikehendaki, pemisah nombor dan menghapuskan ulangan.

Untuk menjana nombor rawak dalam julat frekuensi tertentu:

  • Pilih julat;
  • Nyatakan bilangan nombor rawak;
  • Fungsi "Pemisah nombor" berfungsi untuk keindahan dan kemudahan paparan mereka;
  • Jika perlu, dayakan/lumpuhkan ulangan menggunakan kotak semak;
  • Klik butang "Jana".

Akibatnya, anda akan menerima nombor rawak dalam julat tertentu. Hasil penjana nombor boleh disalin atau dihantar melalui e-mel. Adalah lebih baik untuk mengambil tangkapan skrin atau video proses penjanaan ini. Rawak kami akan menyelesaikan sebarang masalah anda!

  • Tutorial

Pernahkah anda terfikir bagaimana Math.random() berfungsi? Apakah nombor rawak dan bagaimana ia diperoleh? Bayangkan soalan temu bual - tulis penjana nombor rawak anda dalam beberapa baris kod. Jadi, apakah itu, kemalangan dan adakah mungkin untuk meramalkannya?

Saya sangat tertarik dengan pelbagai teka-teki dan tugasan IT, dan penjana nombor rawak adalah salah satu tugas ini. Biasanya dalam saluran Telegram saya, saya menganalisis pelbagai teka-teki dan pelbagai tugas daripada temuduga. Masalah penjana nombor rawak telah mendapat populariti yang besar dan saya ingin mengekalkannya di kedalaman salah satu sumber maklumat yang berwibawa - iaitu, di sini di Habré.

Bahan ini akan berguna kepada semua pembangun front-end dan Node.js yang berada di teknologi canggih dan ingin menyertai projek/permulaan blokchain, di mana pembangun front-end pun ditanya tentang keselamatan dan kriptografi, di sekurang-kurangnya pada tahap asas.

Penjana nombor rawak pseudo dan penjana nombor rawak

Untuk mendapatkan sesuatu secara rawak, kita memerlukan sumber entropi, sumber beberapa huru-hara yang akan kita gunakan untuk menjana rawak.

Sumber ini digunakan untuk mengumpul entropi dan kemudian mendapatkan daripadanya nilai awal (benih), yang diperlukan untuk penjana nombor rawak (RNG) untuk menjana nombor rawak.

Penjana Nombor Rawak Pseudo menggunakan satu benih, oleh itu kerawak pseudonya, manakala Penjana Nombor Rawak sentiasa menjana nombor rawak dengan bermula dengan pembolehubah rawak berkualiti tinggi yang diambil daripada pelbagai sumber entropi.

Entropi ialah ukuran gangguan. Entropi maklumat ialah ukuran ketidakpastian atau ketidakpastian maklumat.
Ternyata untuk mencipta urutan pseudo-rawak kita memerlukan algoritma yang akan menghasilkan urutan tertentu berdasarkan formula tertentu. Tetapi urutan sedemikian boleh diramalkan. Walau bagaimanapun, mari bayangkan bagaimana kita boleh menulis penjana nombor rawak kita sendiri jika kita tidak mempunyai Math.random()

PRNG mempunyai beberapa algoritma yang boleh dihasilkan semula.
RNG ialah proses mendapatkan nombor sepenuhnya daripada beberapa jenis bunyi, keupayaan untuk mengira yang cenderung kepada sifar. Pada masa yang sama, RNG mempunyai algoritma tertentu untuk menyamakan pengedaran.

Kami menghasilkan algoritma PRNG kami sendiri

Penjana nombor pseudorandom (PRNG) ialah algoritma yang menghasilkan urutan nombor yang unsur-unsurnya hampir bebas antara satu sama lain dan mematuhi pengedaran tertentu (biasanya seragam).
Kita boleh mengambil urutan beberapa nombor dan mengambil modulus nombor daripada mereka. Contoh paling mudah yang terlintas di fikiran. Kita perlu memikirkan urutan yang mana untuk diambil dan modul dari apa. Jika anda hanya terus dari 0 ke N dan modulus 2, anda mendapat penjana 1 dan 0:

Fungsi* rand() ( const n = 100; const mod = 2; biarkan i = 0; manakala (benar) ( ​​menghasilkan i % mod; jika (i++ > n) i = 0; ) ) biarkan i = 0; untuk (biar x daripada rand()) ( jika (i++ > 100) pecah; console.log(x); )
Fungsi ini menjana jujukan 01010101010101... malah ia tidak boleh dipanggil pseudo-rawak. Untuk penjana menjadi rawak, ia mesti lulus ujian bit seterusnya. Tetapi kami tidak mempunyai tugas sedemikian. Walau bagaimanapun, walaupun tanpa sebarang ujian, kita boleh meramalkan urutan seterusnya, yang bermaksud bahawa algoritma sedemikian tidak sesuai, tetapi kita berada di arah yang betul.

Bagaimana jika kita mengambil beberapa jujukan yang terkenal tetapi tidak linear, contohnya nombor PI. Dan sebagai nilai untuk modul kami tidak akan mengambil 2, tetapi sesuatu yang lain. Anda juga boleh memikirkan tentang perubahan nilai modul. Urutan digit dalam Pi dianggap rawak. Penjana boleh beroperasi menggunakan nombor Pi bermula dari beberapa titik yang tidak diketahui. Contoh algoritma sedemikian, dengan urutan berasaskan PI dan modul pembolehubah:

Vektor Konst = [...Math.PI.toFixed(48).replace(".","")]; function* rand() ( untuk (biar i=3; i<1000; i++) { if (i >99) i = 2; untuk (biar n=0; n Tetapi dalam JS, nombor PI hanya boleh dipaparkan sehingga 48 digit dan tidak lebih. Oleh itu, masih mudah untuk meramalkan urutan sedemikian, dan setiap larian penjana sedemikian akan sentiasa menghasilkan nombor yang sama. Tetapi penjana kami telah mula menunjukkan nombor dari 0 hingga 9.

Kami mendapat penjana nombor dari 0 hingga 9, tetapi pengedarannya sangat tidak sekata dan ia akan menghasilkan jujukan yang sama setiap kali.

Kita tidak boleh mengambil nombor Pi, tetapi masa dalam perwakilan berangka dan menganggap nombor ini sebagai urutan nombor, dan untuk memastikan urutan itu tidak berulang setiap kali, kita akan membacanya dari akhir. Secara keseluruhan, algoritma kami untuk PRNG kami akan kelihatan seperti ini:

Function* rand() ( biarkan newNumVector = () => [...(+New Date)+""].reverse(); biarkan vektor = newNumVector(); biarkan i=2; manakala (true) ( ​​​​jika ( i++ > 99) i = 2; biarkan n=-1; manakala (++n< vector.length) yield (vector[n] % i); vector = newNumVector(); } } // TEST: let i = 0; for (let x of rand()) { if (i++ >100) rehat; console.log(x)
Ini sudah kelihatan seperti penjana nombor pseudo-rawak. Dan Math.random() yang sama ialah PRNG, kita akan membincangkannya sedikit kemudian. Lebih-lebih lagi, setiap kali kita mendapat nombor pertama yang berbeza.

Sebenarnya, menggunakan contoh mudah ini anda boleh memahami cara penjana nombor rawak yang lebih kompleks berfungsi. Dan terdapat juga algoritma siap pakai. Sebagai contoh, mari kita lihat salah satu daripadanya — ini ialah Linear Congruent PRNG (LCPRNG).

PRNG kongruen linear

PRNG kongruen linear (LCPRNG) ialah kaedah biasa untuk menjana nombor pseudorandom. Ia tidak kuat secara kriptografi. Kaedah ini terdiri daripada mengira sebutan bagi modulo jujukan berulang linear beberapa nombor asli m, diberikan oleh formula. Urutan yang terhasil bergantung pada pilihan nombor permulaan — i.e. benih. Dengan nilai benih yang berbeza, urutan nombor rawak yang berbeza diperolehi. Contoh melaksanakan algoritma sedemikian dalam JavaScript:

Const a = 45; const c = 21; const m = 67; benih var = 2; const rand = () => biji = (a * biji + c) % m; untuk(biar i=0; i<30; i++) console.log(rand())
Banyak bahasa pengaturcaraan menggunakan LCPRNG (tetapi bukan algoritma ini(!)).

Seperti yang dinyatakan di atas, urutan sedemikian boleh diramalkan. Jadi mengapa kita memerlukan PRNG? Jika kita bercakap tentang keselamatan, maka PRNG adalah masalah. Jika kita bercakap tentang tugas lain, maka sifat ini boleh menjadi tambahan. Contohnya, untuk pelbagai kesan khas dan animasi grafik, anda mungkin perlu kerap memanggil secara rawak. Dan di sinilah pengedaran makna dan prestasi adalah penting! Algoritma selamat tidak boleh membanggakan kelajuan.

Harta lain ialah kebolehulangan. Sesetengah pelaksanaan membolehkan anda menentukan benih, dan ini sangat berguna jika urutan mesti diulang. Pembiakan diperlukan dalam ujian, sebagai contoh. Dan terdapat banyak perkara lain yang tidak memerlukan RNG yang selamat.

Cara Math.random() berfungsi

Kaedah Math.random() mengembalikan nombor titik terapung pseudo-rawak daripada julat = crypto.getRandomValues(new Uint8Array(1)); console.log(rvalue)
Tetapi, tidak seperti Math.random() PRNG, kaedah ini sangat intensif sumber. Hakikatnya ialah penjana ini menggunakan panggilan sistem dalam OS untuk mendapatkan akses kepada sumber entropi (alamat mac, CPU, suhu, dll...).

hari yang baik untuk semua.

Saya cadangkan anda menyemak perkara berguna seterusnya - sebanyak 3 penjana dalam talian. Ciri utama mereka ialah semuanya berfungsi tanpa memuatkan semula halaman, sangat, sangat cepat.

Penjana frasa boleh berguna jika anda perlu membuat nama untuk raksasa dalam mainan anda atau "memasukkan" frasa lucu dalam hujah mesra, untuk loteri atau mensimulasikan "lambungan syiling" anda perlu menjana sekumpulan nombor rawak, dan untuk mengelakkan penggodaman akaun anda memerlukan kata laluan yang kukuh . Semua ini boleh diperolehi dengan mudah menggunakan kriteria yang ditetapkan pada halaman ini.

Penjana tajuk

Ia boleh menjadi tidak boleh digantikan dalam pertengkaran dengan rakan seperjuangan, apabila anda perlu mencari frasa yang tidak standard dengan cepat dan menyejukkan rakan yang bersemangat. Tetapi anda boleh menggunakannya hanya untuk menaikkan semangat anda. Penjana nama sangat mudah digunakan: cuma pilih jenis frasa, algoritma (perkataan yang dipratentukan separa atau huruf bergantian dengan saiz tertentu) dan klik butang penjanaan nama.

Penjana kata laluan

Semua orang tahu bahawa kata laluan yang kukuh adalah jaminan yang baik terhadap penggodaman akaun. Sudah tentu, ini tidak bermakna ia tidak boleh dicuri, tetapi kemungkinan ia akan diambil cenderung kepada sifar. Penjana kata laluan dalam talian ialah cara yang baik untuk mendapatkan rentetan rawak dengan cepat yang boleh anda gunakan dengan selamat tanpa takut ia dinyahklasifikasikan. Nombor, huruf Latin dan simbol berikut tersedia:

!№;%:?*()_+=-~/<>,.{}

Menggunakan tetapan lalai anda boleh mendapatkan kata laluan yang hebat, tetapi ingat bahawa kekuatannya ditentukan bukan sahaja oleh bilangan aksara, tetapi juga oleh kepelbagaiannya. Rentetan nombor agak mudah untuk diselesaikan menggunakan kaedah kekerasan biasa, tetapi dalam kes di mana ia tambahan mengandungi huruf kes yang berbeza, ia akan mengambil masa yang sangat lama untuk diselesaikan.

Penjana nombor

Terdapat situasi apabila anda perlu mendapatkan sejumlah nombor rawak sekarang. Sebagai contoh, anda perlu mengisi tiket loteri "5 daripada 36", dan anda mahu melakukan ini dengan mempercayai peluang. Atau uji teori kebarangkalian - jika anda membalikkan syiling sebanyak 30 kali, bolehkah anda mendapat 8 reverse berturut-turut (nombor 0 dan 1 agak sesuai sebagai kepala/ekor)?

Apakah rawak dalam komputer? Bagaimanakah nombor rawak dijana? Dalam artikel ini kami telah cuba memberikan jawapan mudah kepada soalan-soalan ini.

Dalam perisian, dan dalam teknologi secara amnya, terdapat keperluan untuk rawak boleh ulang: nombor dan gambar yang kelihatan rawak sebenarnya dihasilkan oleh algoritma tertentu. Ini dipanggil pseudorandom, dan kami akan melihat cara mudah untuk mencipta nombor pseudorandom. Pada akhir artikel, kami akan merumuskan teorem mudah untuk menghasilkan nombor yang kelihatan rawak ini.

Menentukan apa sebenarnya kemalangan boleh menjadi agak mencabar. Terdapat ujian (seperti kerumitan Kolmogorov) yang boleh memberi anda nilai yang tepat untuk tahap rawak urutan tertentu. Tetapi kami tidak akan mengganggu, kami hanya akan cuba mencipta urutan nombor yang kelihatan tidak berkaitan antara satu sama lain.

Selalunya yang diperlukan bukan hanya satu nombor, tetapi beberapa nombor rawak yang dijana secara berterusan. Oleh itu, memandangkan nilai benih, kita perlu mencipta nombor rawak lain. Nilai awal ini dipanggil benih, dan kita akan lihat bagaimana untuk mendapatkannya kemudian. Buat masa ini, mari fokus untuk mencipta nilai rawak yang lain.

Menjana Nombor Rawak daripada Benih

Satu pendekatan mungkin menggunakan beberapa formula matematik gila pada benih, kemudian memutarkannya sehingga nombor output kelihatan tidak dapat diramalkan, dan kemudian mengambilnya sebagai benih untuk lelaran seterusnya. Satu-satunya persoalan ialah bagaimana rupa fungsi herotan ini.

Mari bereksperimen dengan idea ini dan lihat ke mana ia membawa kita.

Fungsi herotan akan mengambil satu nilai dan mengembalikan nilai yang lain. Mari kita panggil ia R.

R(Input) -> Output

Jika nilai benih kita ialah 1, maka R akan mencipta siri 1, 2, 3, 4,... Ini tidak kelihatan rawak sama sekali, tetapi kita akan sampai ke sana. Biarkan R sekarang menambah pemalar bukannya 1.

R(x) = x + c

Jika c sama, sebagai contoh, 7, maka kita mendapat siri 1, 8, 15, 22, ... Masih tidak sama. Jelas sekali, apa yang kita hilang ialah bilangan itu bukan sahaja perlu meningkat, ia juga perlu tersebar dalam beberapa julat. Kami memerlukan urutan kami untuk kembali ke permulaan - bulatan nombor!

Bulatan nombor

Mari kita lihat muka jam: baris kita bermula pada 1 dan berputar dalam bulatan sehingga 12. Tetapi memandangkan kita bekerja dengan komputer, mari kita biarkan ada 0 bukannya 12.

Sekarang bermula dari 1 kami akan menambah lagi 7. Kemajuan! Kami melihat bahawa selepas 12 siri kami mula berulang, tidak kira nombor yang kami mulakan.

Di sini kita mendapat sifat yang sangat penting: jika gelung kita terdiri daripada n elemen, maka bilangan maksimum elemen yang kita boleh dapatkan sebelum ia mula mengulangi ialah n.

Sekarang mari kita tulis semula fungsi R untuk memadankan logik kita. Anda boleh mengehadkan panjang gelung menggunakan operator modulus atau operator yang selebihnya.

R(x) = (x + c) % m

R (x) = (x + c) % m

Pada ketika ini anda mungkin perasan bahawa beberapa nombor tidak sesuai dengan c. Jika c = 4 dan kita bermula pada 1, urutan kita ialah 1, 5, 9, 1, 5, 9, 1, 5, 9, ... yang sudah tentu tidak berfungsi untuk kita, kerana urutan ini benar-benar bukan sembarangan. Ia menjadi jelas bahawa nombor yang kita pilih untuk panjang gelung dan panjang lompat mesti dikaitkan dengan cara yang istimewa.

Jika anda mencuba beberapa nilai yang berbeza, anda boleh melihat satu sifat: m dan c mestilah koprime.

Setakat ini kita telah membuat lonjakan dengan menambah, tetapi bagaimana jika kita menggunakan pendaraban? Jom perbanyakkan X kepada pemalar a.

R(x) = (ax + c) % m

R (x) = (ax + c) % m

Sifat-sifat yang mesti dipatuhi untuk membentuk kitaran lengkap adalah lebih spesifik sedikit. Untuk membuat gelung yang sah:

  1. (a - 1) mesti boleh dibahagikan dengan semua faktor perdana m
  2. (a - 1) mesti boleh dibahagi dengan 4 jika m boleh dibahagi dengan 4

Sifat-sifat ini, bersama-sama dengan peraturan bahawa m dan c mestilah relatif perdana, membentuk teorem Hull-Dobell. Kami tidak akan melihat buktinya, tetapi jika anda mengambil sekumpulan nilai yang berbeza untuk pemalar yang berbeza, anda boleh membuat kesimpulan yang sama.

Pemilihan benih

Kini tiba masanya untuk bercakap tentang bahagian yang menyeronokkan: memilih benih awal. Kita boleh menjadikannya pemalar. Ini boleh berguna dalam kes di mana anda memerlukan nombor rawak, tetapi anda mahu nombor itu sama setiap kali anda menjalankan program. Contohnya, mencipta peta yang sama untuk setiap permainan.

Cara lain ialah mendapatkan benih daripada sumber baharu setiap kali program dimulakan, seperti jam sistem. Ini berguna apabila anda memerlukan jumlah nombor rawak, seperti dalam program membaling dadu.

Keputusan akhir

Apabila kita menggunakan fungsi pada hasilnya beberapa kali, kita mendapat hubungan berulang. Mari tulis formula kami menggunakan rekursi.

Penjana nombor rawak untuk tiket loteri disediakan secara percuma dalam format "seadanya". Pembangun tidak bertanggungjawab ke atas kerugian material dan bukan material pengguna skrip. Anda boleh menggunakan perkhidmatan ini atas risiko anda sendiri. Walau bagaimanapun, tidak kira apa, anda pasti tidak mahu mengambil risiko :-).

Nombor rawak untuk tiket loteri dalam talian

Perisian ini (RNG dalam JS) ialah penjana nombor pseudo-rawak yang dilaksanakan menggunakan bahasa pengaturcaraan Javascript. Penjana menghasilkan taburan seragam nombor rawak.

Ini membolehkan anda mengetuk "baji dengan baji" pada RNG dengan pengedaran seragam dari syarikat loteri untuk bertindak balas dengan nombor rawak dengan pengedaran seragam. Pendekatan ini menghapuskan subjektiviti pemain, kerana orang mempunyai keutamaan tertentu dalam memilih nombor dan nombor (Hari lahir saudara-mara, tarikh yang tidak dapat dilupakan, tahun, dll.), yang mempengaruhi pemilihan nombor secara manual.

Alat percuma membantu pemain memilih nombor rawak untuk loteri. Skrip penjana nombor rawak mempunyai set mod pra-konfigurasi untuk Gosloto 5 daripada 36, ​​6 daripada 45, 7 daripada 49, 4 daripada 20, Sportloto 6 daripada 49. Anda boleh memilih mod penjanaan nombor rawak dengan tetapan percuma untuk pilihan loteri lain.

Ramalan menang loteri

Penjana nombor rawak dengan pengedaran seragam boleh berfungsi sebagai horoskop untuk cabutan loteri, walaupun kebarangkalian ramalan itu akan menjadi kenyataan adalah rendah. Namun begitu, menggunakan penjana nombor rawak mempunyai kebarangkalian yang baik untuk menang berbanding dengan banyak strategi loteri lain dan selain itu membebaskan anda daripada kesakitan pemilihan nombor bertuah dan kombinasi yang sukar. Bagi pihak saya, saya tidak menasihatkan anda untuk menyerah kepada godaan dan membeli ramalan berbayar; lebih baik membelanjakan wang ini pada buku teks mengenai kombinatorik. Anda boleh belajar banyak perkara menarik daripadanya, sebagai contoh, kebarangkalian untuk memenangi jackpot dalam Gosloto ialah 5 daripada 36 1 Kepada 376 992 . Dan kebarangkalian untuk mendapat hadiah minimum dengan meneka 2 nombor ialah 1 Kepada 8 . Ramalan berdasarkan RNG kami mempunyai kebarangkalian yang sama untuk menang.

Terdapat permintaan di Internet untuk nombor rawak untuk loteri, dengan mengambil kira cabutan lepas. Tetapi dengan syarat loteri menggunakan RNG dengan pengagihan seragam dan kebarangkalian untuk mendapatkan satu atau kombinasi lain tidak bergantung pada setiap cabutan, maka adalah sia-sia untuk cuba mengambil kira keputusan cabutan yang lalu. Dan ini agak logik, kerana tidak menguntungkan bagi syarikat loteri untuk membenarkan peserta menggunakan kaedah mudah untuk meningkatkan kemungkinan menang.

Selalunya ada cakap-cakap bahawa penganjur loteri menipu keputusan. Tetapi sebenarnya, ini tidak masuk akal, malah, sebaliknya, jika syarikat loteri mempengaruhi keputusan loteri, maka mungkin untuk mencari strategi kemenangan, tetapi setakat ini tiada siapa yang berjaya. Oleh itu, adalah sangat menguntungkan bagi penganjur loteri bahawa bola jatuh dengan kebarangkalian seragam. Dengan cara ini, anggaran pulangan loteri 5 daripada 36 ialah 34.7%. Oleh itu, syarikat loteri mengekalkan 65.3% daripada hasil jualan tiket, sebahagian daripada dana (biasanya separuh) diperuntukkan untuk pembentukan jackpot, selebihnya wang pergi ke perbelanjaan organisasi, pengiklanan dan keuntungan bersih syarikat. Statistik edaran mengesahkan angka ini dengan sempurna.

Oleh itu kesimpulannya - jangan beli ramalan yang tidak bermakna, gunakan penjana nombor rawak percuma, jaga saraf anda. Biarkan nombor rawak kami menjadi nombor bertuah anda. Mempunyai mood yang baik dan mempunyai hari yang hebat!