Me encontré con una pregunta en StackOverflow que dice lo siguiente, todo se basa en números naturales:
Dada la función rand5 (que produce números naturales aleatorios 0-4), utilízala para generar un rand7 (que produce números naturales aleatorios 0-7).
He encontrado una solución que hace lo siguiente:
$convertRand(7, 5) = \left [ \sum_{1}^{7}(rand(5)) \right ] \bmod 7$
Por si mis conocimientos de látex no dan para más, lo que hace es sumar 7 veces rand5 y luego obtener el módulo del resultado. Hice pruebas con millones de iteraciones, y la distribución parece bastante justa (nunca perfecta ya que estamos hablando de números aleatorios).
Así pues, la solución genérica sería la siguiente
$convertRand(dest, origin) = \left [ \sum_{1}^{dest}(rand(origin)) \right ] \bmod dest$
He probado con algunos valores (7 para dest, 13 para origen y tal), y la distribución sigue pareciendo bastante uniforme... Sin embargo, no estoy encontrando una manera de probar por qué esto funciona...
Sumando el rand5 7 veces se obtienen números entre 0 y 28, pero con más probabilidad en valores medios (como 14) y menos resultados en los bordes, especialmente en el borde alto...
Sin embargo, si añado a rand5 una cantidad de veces no divisible por 7 y luego aplico el módulo 7, la distribución deja de ser uniforme.
Aquí está la pregunta con mi respuesta en Stackoverflow (sólo para no publicar código aquí):
https://stackoverflow.com/questions/137783/expand-a-random-range-from-1-5-to-1-7/26405409#26405409
Así que, en caso de que mi pregunta específica esté demasiado mezclada en mi escritura... ¿Cómo puedo probar si esta solución genérica es cierta matemáticamente?
Estadísticamente diría que sí, ya que obtengo distribuciones uniformes en múltiples ejecuciones con millones de iteraciones...