Cuando uno aprende a programar, algo que se suele mostrar es como generar números aleatorios, y a veces (muchas) se muestra como forma generar un número y despues "recortarlo", por ejemplo en C: int r = random() % 100;

Esto tiene un problema grave, y es que se pierde aleatoriedad en el proceso, por ejemplo, si tomamos los datos de urandom y luego le aplicamos el "recorte" quedaría esta distribución de datos:

Código: http://pastebin.com/sXtAe7nK

Los dos colores se refieren a los mismos datos, en rojo como son originalmente (de 0 a 255, uniformemente distribuidos) y en verde después de aplicarles el módulo (entre 55 y 56 se rompe la uniformidad), la causa es obvia: Para 0 hay 3 posibilidades: 0, 100, 200

Para 1 también: 1, 101, 201 ... Para 55: 55, 155, 255 Pero a partir de 56 solo 2: 56, 156 (no hay 256)

Una solucion es forzar a que el "rango de entrada" sea multiplo del "rango de salida" por ejemplo, ignorando los valores mayores que 199Código: http:// pastebin.com/H9cK3ezg

Eso es todo, hasta otra.