Tarea
Dado un número entero positivo n
menor que el 2^30
especificado como entrada en cualquier forma que elija, su código debería generar un número entero aleatorio entre 0
e n
, inclusive. El número que genere debe elegirse uniformemente al azar . Es decir, cada valor de 0
a n
debe ocurrir con la misma probabilidad (ver Reglas y Advertencias).
Reglas y advertencias
Su código puede suponer que cualquier generador de números aleatorios integrado en su idioma o biblioteca estándar que afirma ser uniformemente aleatorio es de hecho uniforme. Es decir, no tiene que preocuparse por la calidad de la fuente aleatoria que está utilizando. Sin embargo,
- Debe establecer que si la fuente aleatoria que está utilizando es uniforme, entonces su código genera correctamente un entero aleatorio uniforme de
0
an
. - Cualquier argumento al llamar a una función aleatoria integrada o de biblioteca debe ser constante. Es decir, deben ser completamente independientes del valor de entrada.
- Su código puede terminar con probabilidad 1 en lugar de estar garantizado para terminar.
Notas
randInt(0,n)
no es válido ya que toma la entrada como argumento para una función incorporada o biblioteca.rand()%n
será no dar un número aleatorio uniforme en general. A modo de ejemplo dado por betseg, siintmax == 15
yn = 10
, a continuación, que será mucho más probable conseguir0-5
que6-10
.floor(randomfloat()*(n+1))
tampoco dará un número aleatorio uniforme en general debido al número finito de diferentes valores posibles de coma flotante entre 0 y 1.
rng()
proporciona0
-100
, sin = 75
, y la función esrng()%75
, entonces 0-25 será más común ...)