2011-11-23 23 views
7

¿Cómo podemos generar un número aleatorio muy grande en Java? Estoy hablando de algo así como 10000 dígitos. Sé que tenemos que usar BigInteger, pero ¿cómo podemos hacer esto? ¿Cuál es la forma más eficiente de hacer algo como esto? Por favor, brinde un pequeño ejemplo. Gracias.Generando números aleatorios muy grandes java

Respuesta

17

Bueno, una forma es ir a Random.org y descargar uno de los archivos binarios aleatorios. Los archivos se generan a partir del ruido atmosférico, por lo que es muy aleatorio. Lo usé para llaves Zobrist en mi motor de ajedrez.

Alternativamente, usted podría ir

BigInteger b = new BigInteger(256, new Random()); 

que le dará lo que quiere. En este ejemplo, un BigInteger que consta de 256 bits.

+1

+1. Fueron cuatro constructores en la documentación, no lo vi: D. – Vlad

+0

¡Sucede lo mejor de nosotros! –

7

Combine Random.nextBytes(byte[]) con BigInteger(byte[]).

import java.util.*; 
import java.math.*; 
class Test{ 
    public static void main(String[]_){ 

     int n = 16; 

     Random r = new Random(); 
     byte[] b = new byte[n]; 
     r.nextBytes(b); 
     BigInteger i = new BigInteger(b); 

     System.out.println(i); 
    } 
} 
+1

+1: Posiblemente utilice mod() para obtener un número específico de dígitos. –

+0

¿me puede explicar cómo funciona esto? Estoy más o menos confundido en la parte de bytes ... gracias –

+0

Asigna una matriz de bytes, nextBytes lo llena con valores aleatorios, y luego BigInteger se inicializa como el número binario definido por esa secuencia de bytes. Pero creo que la solución de Jaco es más concisa. – Vlad