Algoritmus správný PRNG (Pseudo-generátor náhodných čísel), bude mít časový cyklus, během kterého to nikdy nebude ve stejném stavu. Máte-li vystavit celý stav PRNG v počtu načtena z něj dostanete číslo zaručenou jedinečné po dobu generátoru.
Jednoduchý PRNG, který toto se nazývá ‚ Linear congruential ‘ PRNG který opakuje vzorec:
X(i) = AX(i-1)|M
Pomocí pravého dvojice faktorů můžete získat dobu 2 ^ 30 (cca 1 miliarda) od jednoduchého PRNG s 32 bitů akumulátoru. Všimněte si, že budete potřebovat 64 bit long dočasné proměnné držet prostřední část ‚AX‘ z výpočtu. Většina, ne-li všechny kompilátory C bude podporovat tento typ dat. Také byste měli být schopni to udělat s číselný datový typ u většiny SQL dialektů.
Se správnými hodnotami A a M můžeme získat generátor náhodných čísel s dobrými statistické a geometrické vlastnosti. Tam je slavný dokument o tom viz Fishman a Moore.
Pro m = 2 ^ 31 až 1 dostaneme použít hodnoty níže uvedená získat PRNG s pěknou dlouhou dobu (2 ^ 30 IIRC).
Dobrými hodnotami:
742,938,285
950,706,376
1,226,874,159
62,089,911
1,343,714,438
Všimněte si, že tento typ generátoru je (podle definice), není kryptograficky bezpečný. Pokud víte, že poslední číslo generované z něj můžete předpovědět, co bude dělat dál. Bohužel se domnívám, že se nemůžete dostat šifrovací bezpečnost a záruku neopakovatelnosti najednou. Pro PRNG být kryptograficky zabezpečené (např Blum Blum Shub ) nemůže vystavit dostatečný stav v generované číslo na další číslo v pořadí, aby se předpovědět. Proto je vnitřní stav je širší než vygenerované číslo a (aby měl dobré zabezpečení) lhůta bude delší, než je počet možných hodnot, které mohou být generovány. To znamená, že exponovaná číslo nebude ojedinělý ve stanovené lhůtě.
Z podobných důvodů, že totéž platí o dlouhou periodou generátorů, jako jsou Mersenne Twister.