Heim > Java > javaLernprogramm > Hauptteil

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

Linda Hamilton
Freigeben: 2024-10-25 01:02:30
Original
416 Leute haben es durchsucht

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)
Nach dem Login kopieren

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);
Nach dem Login kopieren

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);
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!