Primzahlen generieren

JavaNoobOfDoom

Neues Mitglied
Hey Leute ich mal mir mal Code zusammengebastelt um Primzahlen zu generieren (brauchte ich für ein Projekt) aber bei sehr großen mengen (100.000.000+) wird sie sehr langsam. Ich vermute mal dass es eine deutlich bessere Möglichkeit gibt, Primzahlen zu generieren, die ich bisher noch nicht gefunden habe. Habt ihr ne Idee wie ich entweder diese Methode schneller machen kann oder eine komplett andere Möglichkeit zum generieren?

Java:
public static int randomPrimeNumber(int pMax)
    {
        if(pMax>=1) {
            boolean prime[]=new boolean[pMax];
            for(int i=0; i<pMax; i++) {
                prime[i]=true;
            }


            for(int i=1; i<pMax; i++) {
                if(prime[i]) {
                    int temp=0;
                    int position=2;


                    while(temp<pMax) {
                        try {
                            prime[(position*(i+1))-1]=false;
                        } catch (ArrayIndexOutOfBoundsException e) {}
                        position++;
                        temp=position*(i+1);
                    }
                }
            }


            while(true) {
                int random=(int)(Math.random()*pMax);
                if(prime[random]) {
                    return random+1;
                }
            }
        } return 0;
    }
 
Zuletzt bearbeitet:

Tobse

Top Contributor
Deine "PRimzahlprüfung" ist ziemlich kompliziert, das geht deutlich einfacher (zumal du das prime-Array bei jedem Aufruf neu berechnest).
Um solche Algorithmen schnell zu halten prüft man auch oft nicht, ob eine Zahl tatsächlich eine Primzahl ist sondern ob eine Zahl mit einer Gewissen (ziemlich geringen) Wahrscheinlichkeit keine Primzahl ist. Siehe dazu: Google "probabilistischer Primzahltest"
 

Enceladus271

Bekanntes Mitglied
Also deine Lösung zur Erzeugung von Primzahlen ist wie Tobse schon sagte ziemlich kompliziert (außerdem nicht ganz korrekt: Bei randomPrimeNumber(50) habe ich einmal 50 als Rückgabe erhalten).

Ich glaube nicht, dass es Sinn macht alle Primzahlen von 1 bis n zu erzeugen und dann eine zufällig zu wählen. Es würde mehr Sinn machen einfach die erzeugten Zufallszahlen normal zu testen:

Java:
    public static boolean isPrime( int n ) {
        if ( n < 2 ) {
            return false;
        }
        final int loopend = (int) Math.sqrt( n );
        for ( int i = 2; i <= loopend; i++ ) {
            if ( n % i == 0 ) {
                return false;
            }
        }
        return true;
    }

    public static int getRandomPrimeNumber( int pMax ) {
        final Random random = new Random();
        while ( true ) {
            final int nextInt = random.nextInt( pMax );
            if ( isPrime( nextInt ) ) {
                return nextInt;
            }
        }
    }

Laut der Primzahlfuktion Pi(x) sind etwa 5% der Zahlen zwischen 0 und Integer.MAX_VALUE Primzahlen. Im Durchschnitt muss die Methode also nur 20 Zahlen testen bis die erste Primzahl gefunden wird.
 

Natac

Bekanntes Mitglied
Warum berechnest du dir nicht 1x alle Primzahlen zwischen 1 und Integer.MAX_VALUE und wählst dann nur noch zufällig eine aus? Das sollte auf Dauer schneller und (imo) einfacher sein, als immer neue Primzahlen zu ermitteln und davon dann eine zufällig auszuwählen.
 
Zuletzt bearbeitet:

Enceladus271

Bekanntes Mitglied
Ist die Frage wie oft man eine zufällige Primzahl braucht und wieviel Arbeitsspeicher man zur Verfügung hat. Es liegen etwa 100.000.000 Primzahlen zwischen 0 und MAX_VALUE. Das heißt die Primzahlen würden 400 MB Arbeitsspeicher belegen. Und es würde auch wahrscheinlich mehrere Sekunden dauern alle diese Zahlen zu berechnen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Primzahlen berechnen Allgemeine Java-Themen 13
G Anzahl Primzahlen im Intervall Allgemeine Java-Themen 3
C Primzahlen Server Allgemeine Java-Themen 3
D Primzahlen berechnen funktioniert nicht Allgemeine Java-Themen 2
E Primzahlen - Sieb des Eratosthenes Allgemeine Java-Themen 40
B Primzahlen Berechnung optimieren Allgemeine Java-Themen 7
B Primzahlen test Allgemeine Java-Themen 3
LimDul Eindeutige ID (ala UUID) generieren als numerisch, maximal 16 Stellen Allgemeine Java-Themen 11
R Farbe zu einem Eckpunkt generieren Allgemeine Java-Themen 0
J Sudoku generieren Schwierigkeitsgrad Allgemeine Java-Themen 3
G Aus JTextField Zahlen auslesen und random generieren Allgemeine Java-Themen 10
D Mail aus GUI generieren Allgemeine Java-Themen 2
M Serien- / Werksnummern generieren Allgemeine Java-Themen 7
K Java QUIZ-Spiel Fragen und Antworten generieren?! Allgemeine Java-Themen 5
N Zahl mit bestimmter Länge und nur bestimmten Zahlen generieren lassen Allgemeine Java-Themen 7
M Zufälligen String generieren und alle 5 Minuten ändern Allgemeine Java-Themen 2
T Geschwindigkeit beim Generieren erhöhen? Allgemeine Java-Themen 7
DStrohma Verschlüsselung: SALT aus Passwort generieren? Allgemeine Java-Themen 3
darekkay (JUnit) Testdaten generieren - Framework? Allgemeine Java-Themen 2
L Generieren Zufallsdaten aus CSV dateien Allgemeine Java-Themen 11
N String generieren Allgemeine Java-Themen 3
J Hash aus Verzeichniss generieren Allgemeine Java-Themen 2
Eldorado Barcodes mit statischer Breite generieren Allgemeine Java-Themen 3
M aus 3 BufferedImages 1 generieren Allgemeine Java-Themen 5
E Zufallszahl generieren Allgemeine Java-Themen 5
M Shapes mit abgerundeten Ecken generieren Allgemeine Java-Themen 2
T Zufallszahlen generieren und dabei eine Zahl weglassen Allgemeine Java-Themen 4
S Mittels eines Applets Bilder generieren die in einer Webseite angezeigt werden..? Allgemeine Java-Themen 8
MQue List<String> aus List<Object> generieren Allgemeine Java-Themen 2
V Einfache toString() generieren? Allgemeine Java-Themen 6
O .jar Files - Tools zum generieren Allgemeine Java-Themen 25
B PDF generieren. Problem mit PipedStreams. Allgemeine Java-Themen 4
G UML aus Commandline generieren Allgemeine Java-Themen 9
M nicht gleichverteilte Zufallszahlen generieren Allgemeine Java-Themen 6
B Mit Java Powerpoint Reporte und PDF generieren Allgemeine Java-Themen 9
lumo "Exzessiv" dynamisches generieren Allgemeine Java-Themen 6
B Schlüssel von Java automatisch generieren lassen. Allgemeine Java-Themen 4
T Einfachen Ton in Java generieren Allgemeine Java-Themen 4
B String generieren Allgemeine Java-Themen 4
S Datei aller möglich encodings generieren Allgemeine Java-Themen 2
G Char-zufällig-generieren Allgemeine Java-Themen 11
H RTF zu Word-Dokument generieren Allgemeine Java-Themen 5
B Namen eines Objekts generieren? Allgemeine Java-Themen 4
C Laufende Nummer generieren Allgemeine Java-Themen 4
S Dynamisches Feld generieren. Allgemeine Java-Themen 10
N Transaktionsnummer (Tan) generieren? Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben