Losowa liczba w zakresie od 0 do n

Biorąc pod uwagę funkcję R, która daje prawdziwe losowe 32-bitowe liczby, chciałbym funkcję, która zwraca losowe liczby całkowite z zakresu od 0 do n, gdzie n jest dowolne (mniej niż 2 ^ 32).

Funkcja musi wytwarzać wszystkie wartości 0 do n z równym prawdopodobieństwem.

Chciałbym funkcji, która wykonuje się w stałym czasie bez instrukcji if lub pętli, więc coś takiego jak funkcja Java Random.nextInt (n) jest wyłączona.

Podejrzewam, że prosty moduł nie wykona zadania, chyba że n jest mocą 2 - czy mam rację?

Przyjąłem odpowiedź Jasona, mimo że wymaga ona pętli o nieokreślonym czasie trwania, ponieważ wydaje się, że jest to najlepsza metoda w praktyce i zasadniczo odpowiada na moje pytanie. Wciąż jednak interesują mnie wszelkie algorytmy (nawet jeśli są mniej wydajne), które miałyby charakter deterministyczny i byłyby gwarantowane do zakończenia, jak wskazał Mark Byers.

questionAnswers(5)

yourAnswerToTheQuestion