Tarea
Dado un número entero positivo nmenor que el 2^30especificado como entrada en cualquier forma que elija, su código debería generar un número entero aleatorio entre 0e n, inclusive. El número que genere debe elegirse uniformemente al azar . Es decir, cada valor de 0a ndebe 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
0an. - 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()%nserá no dar un número aleatorio uniforme en general. A modo de ejemplo dado por betseg, siintmax == 15yn = 10, a continuación, que será mucho más probable conseguir0-5que6-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 ...)