Ένας αλγόριθμος σωστή PRNG (Pseudo-Random Number Generator) θα έχει ένα χρόνο κύκλου κατά την οποία δεν θα είναι ποτέ στην ίδια κατάσταση. Αν σας εκθέσει ολόκληρη την πολιτεία της PRNG του αριθμού ανακτώνται από αυτό, θα πάρετε έναν αριθμό που εγγυάται μοναδική για την περίοδο της γεννήτριας.
Μια απλή PRNG που κάνει αυτό καλείται η « γραμμική συμβατική PRNG» η οποία επαναλαμβάνεται μια φόρμουλα:
X(i) = AX(i-1)|M
Χρησιμοποιώντας το σωστό ζευγάρι των παραγόντων που μπορείτε να πάρετε μια περίοδο 2 ^ 30 (περίπου 1 δις) από ένα απλό PRNG με συσσωρευτή 32 bit. Σημειώστε ότι θα χρειαστείτε ένα κομμάτι 64 μακρά μακρά προσωρινή μεταβλητή για να κρατήσει το ενδιάμεσο τμήμα «AX» του υπολογισμού. Οι περισσότεροι, αν όχι όλοι οι μεταγλωττιστές C θα υποστηρίζει αυτόν τον τύπο δεδομένων. Θα πρέπει επίσης να είναι σε θέση να το κάνει με έναν αριθμητικό τύπο δεδομένων στις περισσότερες διαλέκτους SQL.
Με τις σωστές τιμές των Α και Μ μπορούμε να πάρουμε μια γεννήτρια τυχαίων αριθμών με καλές στατιστικές και γεωμετρικές ιδιότητες. Υπάρχει ένα διάσημο βιβλίο σχετικά με αυτό γράφτηκε από Fishman και Moore.
Για Μ = 2 ^ 31-1 παίρνουμε να χρησιμοποιήσετε τις τιμές των Α παρακάτω για να πάρετε μια PRNG με ένα ωραίο μακρά περίοδο (2 ^ 30 IIRC).
Καλή τιμές του Α:
742,938,285
950,706,376
1,226,874,159
62,089,911
1,343,714,438
Σημειώστε ότι αυτό το είδος της γεννήτριας είναι (εξ ορισμού) δεν κρυπτογραφικά ασφαλής. Εάν γνωρίζετε τον τελευταίο αριθμό που παράγεται από αυτό μπορείτε να προβλέψει τι θα κάνουμε στη συνέχεια. Δυστυχώς πιστεύω ότι δεν μπορείτε να πάρετε κρυπτογραφική ασφάλεια και εγγυημένη μη επαναληψιμότητα, την ίδια στιγμή. Για μια PRNG να είναι ασφαλής από κρυπτογραφική άποψη (π.χ. Blum Blum Shub ) ότι μπορεί να μην εκθέτουν επαρκή κατάσταση σε ένα αριθμός που παράγεται για να επιτραπεί ο επόμενος αριθμός στην ακολουθία που πρόκειται να προβλεφθεί. Συνεπώς, η εσωτερική κατάσταση είναι ευρύτερη από την παραγόμενη αριθμό και (για να έχει καλή ασφάλεια) η περίοδος θα είναι μεγαλύτερη από τον αριθμό των πιθανών τιμών που μπορεί να δημιουργηθεί. Αυτό σημαίνει ότι το εκτεθειμένο αριθμός δεν θα είναι το μοναδικό εντός της περιόδου.
Για παρόμοιους λόγους, το ίδιο ισχύει και για τις γεννήτριες μακράς περιόδου, όπως ο Mersenne Twister.