Compito
Dato un numero intero positivo ninferiore a quello 2^30specificato come input in qualsiasi modo tu scelga, il tuo codice dovrebbe generare un numero intero casuale compreso tra 0e n, incluso. Il numero che generi dovrebbe essere scelto in modo uniforme a caso . Questo significa che ogni valore da 0a ndeve apparire con uguale probabilità (vedi Regole e Avvertenze).
Regole e avvertenze
Il tuo codice può presumere che qualsiasi generatore di numeri casuali incorporato nella tua lingua o libreria standard che afferma di essere uniformemente casuale sia in effetti uniforme. Cioè non devi preoccuparti della qualità della fonte casuale che stai usando. Tuttavia,
- Devi stabilire che se la sorgente casuale che stai usando è uniforme, il tuo codice emette correttamente un intero casuale uniforme da
0an. - Qualsiasi argomento quando si chiama una funzione casuale incorporata o in libreria deve essere costante. Cioè devono essere completamente indipendenti dal valore di input.
- Il tuo codice può terminare con probabilità 1 anziché essere garantito per terminare.
Gli appunti
randInt(0,n)non è valido poiché accetta l'input come argomento per una funzione di libreria o incorporata.rand()%nsarà non dare un numero casuale uniforme in generale. A titolo di esempio dato da betseg, seintmax == 15en = 10, allora si sarà molto più probabile per ottenere0-5rispetto6-10.floor(randomfloat()*(n+1))inoltre non fornirà un numero casuale uniforme in generale a causa del numero finito di diversi possibili valori in virgola mobile compresi tra 0 e 1.
rng()fornisce0-100, sen = 75e la funzione èrng()%75, allora 0-25 sarà più comune ...)