3 Stimmen

Kann mir bitte jemand erklären, wie diese Implementierung funktioniert? Und kann sie verbessert werden? Wie?

public class Main { 
    public static void main(String args []){ 
        long numberOfPrimes = 0; //Initialises variable numberOfPrimes to 0 (same for all other variables)
        int number = 1; 
        int maxLimit = 10000000; 
        boolean[] sieve = new boolean[maxLimit]; //creates new boolean array called sieve and allocates space on the
                                                //stack for this array which has maxLimit spaces in it 
        for ( int i = 2; i < maxLimit; i++ ) { //for statement cycling from 2 to 10000000, does not execute the rest
                                              //of the block if the boolean value in the array is true 
            if ( sieve[i] == true ) continue; 

            numberOfPrimes++; //otherwise it increments the number of prime numbers found

            if ( numberOfPrimes == 10001 ) {  //if 10001st prime number is found, break from loop
                number = i; 
                break; 
            } 

            for ( int j = i+i; j < maxLimit; j += i ) //do not understand the point of this loop logically
                sieve[j] = true;                      //testing if the value in the array is true again?
        } 
        System.out.println("10001st prime: "+ number); 
    } 
    }

Ich verstehe nicht wirklich, was in diesem Programm vor sich geht und hoffe, dass es mir jemand erklären kann. Ich habe die spezifischen Zeilen kommentiert, die mir Probleme bereiten bzw. die ich verstehe, was die Zeilen tun sollen. Vielen Dank für all die Hilfe! :)

0voto

GuruKulki Punkte 25088

Dies ist der Algorithmus zum Finden der Primzahlen zwischen 1 und der angegebenen Höchstgrenze.

Und die 2. Schleife soll für die Zahl, die durch eine andere Zahl teilbar ist, wahr werden . so für die erste äußere Schleife alle Zahl teilbar durch zwei ll auf true dann teilbar durch 3 dann durch 4 und so weiter gesetzt werden. und die Zahlen, für die das boolesche Feld false enthält, sind die Primzahlen .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X