Un algoritmo corretto PRNG (Pseudo-Random Number Generator) avrà un tempo di ciclo durante il quale non sarà mai nello stesso stato. Se si espone l'intero stato del PRNG del numero recuperato da esso, si otterrà un numero garantito unico per il periodo del generatore.
Un semplice PRNG che fa questo è chiamato ' lineare congruential PRNG' che itera formula:
X(i) = AX(i-1)|M
Utilizzando il giusto paio di fattori che si può ottenere un periodo di 2 ^ 30 (circa 1 miliardo) da un semplice PRNG con un 32 bit accumulatore. Si noti che è necessario un po '64 lungo tempo variabile temporanea per contenere la parte intermedia 'AX' di calcolo. La maggior parte se non tutti i compilatori C sosterrà questo tipo di dati. Si dovrebbe anche essere in grado di farlo con un tipo di dati numerici sulla maggior parte dei dialetti SQL.
Con i giusti valori di A e M possiamo ottenere un generatore di numeri casuali con buone proprietà statistiche e geometriche. C'è un famoso documento di questo scritto da Fishman e Moore.
Per M = 2 ^ 31-1 otteniamo possono utilizzare i valori di A seguito per ottenere un PRNG con un lungo periodo di bel (2 ^ 30 IIRC).
Buoni valori di A:
742,938,285
950,706,376
1,226,874,159
62,089,911
1,343,714,438
Si noti che questo tipo di generatore è (per definizione) non crittograficamente sicuro. Se si conosce l'ultimo numero generato da esso si può prevedere che cosa farà il prossimo. Purtroppo credo che non si può ottenere la sicurezza crittografica e garantita la non riproducibilità allo stesso tempo. Per un PRNG sia crittograficamente sicuro (es Blum Blum Shub ) non può esporre stato sufficiente un numero generato per consentire il successivo numero della sequenza da predire. Pertanto lo stato interno è più largo del numero generato e (in modo da avere una buona sicurezza) il periodo sarà più lungo del numero di possibili valori che possono essere generati. Ciò significa che il numero esposta non sarà unica entro il periodo.
Per ragioni analoghe stesso vale per generatori di lungo periodo come il Mersenne Twister.