2011-11-23 32 views
7

Jak wygenerować bardzo dużą liczbę losową w Javie? Mówię coś jak 10000 cyfr? Wiem, że musimy używać BigInteger, ale jak możemy to zrobić? Jaki jest najskuteczniejszy sposób robienia czegoś takiego? Podaj mały przykład. Dziękuję Ci.Generowanie bardzo dużych liczb losowych java

Odpowiedz

17

Cóż, jednym ze sposobów jest, aby przejść do Random.org i pobrać jeden z losowych plików binarnych. Pliki są generowane z hałasu atmosferycznego, więc jest bardzo losowy. Użyłem go dla kluczy Zobrist w moim silniku szachowym.

Ewentualnie można iść

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

które dadzą Ci to, co chcesz. W tym przykładzie BigInteger składa się z 256 bitów.

+1

+1. W dokumentacji znalazły się cztery konstruktory, których nie widziałem: D. – Vlad

+0

Zdarza się nam jak najlepiej! –

7

Połącz Random.nextBytes(byte[]) z 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: Być może użyj mod(), aby uzyskać określoną liczbę cyfr. –

+0

czy możesz wyjaśnić, jak to działa? Jestem mniej lub bardziej zdezorientowany na części bajtów .. dzięki –

+0

Przydzielasz tablicę bajtów, nextBytes wypełnia ją losowymi wartościami, a następnie BigInteger jest inicjalizowany jako liczba binarna zdefiniowana przez tę sekwencję bajtów. Ale myślę, że rozwiązanie Jaco jest bardziej zwięzłe. – Vlad

Powiązane problemy