Całkiem „przypadkowe”, losowe liczby można otrzymać w następujący sposób. Bierzemy trzy dosyć duże liczby a, b, m oraz dowolną pierwszą liczbę losową z0; (tzw ziarno). Następną liczbę losową zn otrzymujemy w następujący sposób:
zn = (zn – 1 ? a + b) mod m
gdzie mod, oznaczane też przez %) jest resztą z dzielenia np: 5 mod 2 = 1, 17 mod 3 = 2 itp.
Obliczmy kilka liczb losowych – niech a=5, b= 13, m=11, z0=3.
z0=3
z1=(3?5+13)mod11=6
z2=(3?6+13)mod11=9
z3=(3?9+13)mod11=7
z4=(3?7+13)mod11=1
itd.
Jak widać z rachunków otrzymujemy ciąg 3, 6, 9, 7, 1, … który jest dosyć chaotyczny. Jeśli weźmiemy duże liczby a,b i m to można się spodziewać, że otrzymamy lepsze liczby. Licząc w ten sposób szybko przekonamy się, że otrzymane w ten sposób liczby powtarzają się cyklicznie,
W praktycznych implamentacjach liczby a, b, m są kilkudziesięciocyfrowe. Z praktyki wiadomo, że otrzymanie wystarczająco dobrych liczb losowych nie jest takie proste. Czasami komputer zbiera dane dotyczące ruchów myszki, wartości znaków wciśnętych klawiszy na klawiaturze i z tych danych dopiero liczy liczby losowe. Czasami i to nie jest wystarczające i komputer odnosi się do jakiegoś, z natury przypadkowego, procesu fizycznego np. do rozpadu promieniotwórczego i dopiero wówczas mamy gwarancję, że liczby będą losowe.
Oto przykład liczb losowych w zakresie od 1 do 32576 wygenerowanych przez funkcję rand: {1067, 23403, 30549,138….}
Imitację rzutów monetą możemy uzyskać unawiając się, że wygenerowanej liczbie parzystej (orzeł) przypisujemy liczbę 0 a liczbom nieparzystym liczbę 1 (reszka) dla powyższego ciągu mamy: {1, 1, 1, 0…}. Czyli jeśli wygenerowana liczba wynosi Z to Z % 2 oznacza wynik rzutu monetą (0 lub 1).
Czasami potrzebne jest generowanie liczb takich, że orłom odpowiada -1 a reszkom odpowiada +1, wygrana lub przegrana 1 zł, wówczas wynik liczymy tak: Z % 2 ? 2 – 1