Tâche
Étant donné un entier positif ninférieur à celui 2^30spécifié en entrée de la manière que vous choisissez, votre code doit générer un entier aléatoire entre 0et ninclus. Le nombre que vous générez doit être choisi de manière uniforme et aléatoire . C'est-à-dire que chaque valeur de 0à ndoit se produire avec une probabilité égale (voir Règles et mises en garde).
Règles et mises en garde
Votre code peut supposer que tout générateur de nombres aléatoires intégré à votre langue ou bibliothèque standard qui prétend être uniformément aléatoire est en fait uniforme. Vous n'avez donc pas à vous soucier de la qualité de la source aléatoire que vous utilisez. cependant,
- Vous devez établir que si la source aléatoire que vous utilisez est uniforme, votre code génère correctement un entier aléatoire uniforme de
0àn. - Tout argument lors de l'appel d'une fonction aléatoire intégrée ou de bibliothèque doit être constant. Autrement dit, ils doivent être complètement indépendants de la valeur d'entrée.
- Votre code peut se terminer avec la probabilité 1 plutôt que d'être garanti de se terminer.
Remarques
randInt(0,n)n'est pas valide car il prend l'entrée comme argument d'une fonction intégrée ou de bibliothèque.rand()%nne pas donner un nombre aléatoire uniforme en général. À titre d'exemple donné par betseg, siintmax == 15etn = 10, alors vous aurez beaucoup plus de chances d'obtenir0-5que6-10.floor(randomfloat()*(n+1))ne donnera pas non plus un nombre aléatoire uniforme en général en raison du nombre fini de différentes valeurs possibles en virgule flottante entre 0 et 1.
rng()fournit0-100, sin = 75et la fonction estrng()%75, alors 0-25 sera plus courant ...)