Heim  >  Artikel  >  Java  >  Wie generiert man in Java beliebig große zufällige BigIntegers in einem bestimmten Bereich?

Wie generiert man in Java beliebig große zufällige BigIntegers in einem bestimmten Bereich?

Linda Hamilton
Linda HamiltonOriginal
2024-10-25 01:02:30407Durchsuche

How to Generate Arbitrarily Large Random BigIntegers in a Specific Range in Java?

Zufällige große Ganzzahlen in Java generieren

Frage:

Wie generiert man beliebig große Zufallszahlen? BigInteger-Werte im Bereich von 0 bis n (außer n), wobei n keine Potenz von 2 ist?

Antwort:

Verwendung des Konstruktors von BigInteger, was etwas dauert count und einer Instanz eines Zufallsgenerators können Sie solche Werte erstellen:

public BigInteger(int numBits, Random rnd)

Um jedoch Werte innerhalb des gewünschten Bereichs zu erhalten, ist es notwendig, eine Schleife zu verwenden:

BigInteger randomNumber;
do {
    randomNumber = new BigInteger(upperLimit.bitLength(), randomSource);
} while (randomNumber.compareTo(upperLimit) >= 0);

Im Durchschnitt wird diese Schleife in weniger als zwei Iterationen ausgeführt, wodurch eine gleichmäßige Verteilung gewährleistet wird.

Bearbeiten:

In Situationen, in denen der Zufallsgenerator leistungsintensiv ist, können Sie dies tun Implementieren Sie den folgenden Ansatz:

int nlen = upperLimit.bitLength();
BigInteger nm1 = upperLimit.subtract(BigInteger.ONE);
BigInteger randomNumber, temp;
do {
    temp = new BigInteger(nlen + 100, randomSource);
    randomNumber = temp.mod(upperLimit);
} while (s.subtract(randomNumber).add(nm1).bitLength() >= nlen + 100);

Während diese Methode die Wahrscheinlichkeit mehrerer Schleifeniterationen deutlich reduziert (weniger als eine Chance von 2^100), nutzt sie die rechenintensive mod()-Operation. Daher ist dieser Ansatz möglicherweise weniger effizient als der vorherige, wenn die bereitgestellte Random-Instanz einen geringen Leistungsaufwand aufweist.

Das obige ist der detaillierte Inhalt vonWie generiert man in Java beliebig große zufällige BigIntegers in einem bestimmten Bereich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn