Java Programm zum Drucken von Prime Numbers von 1 um 100

โšก Intelligente Zusammenfassung

Programm zum Drucken von Primzahlen von 1 bis 100 in Java Das Programm durchsucht alle Werte in einem Bereich und gibt diejenigen aus, die genau zwei Teiler haben. Dieser Artikel erklรคrt die Definition, die Prรผfmethode, das vollstรคndige Programm, das Sieb des Eratosthenes sowie einen Leistungsvergleich mit verifizierten Ergebnissen.

  • ๐Ÿ”ข Definitionsregel: Eine Primzahl ist grรถรŸer als 1 und nur durch 1 und sich selbst teilbar, was 0 und 1 gรคnzlich ausschlieรŸt.
  • ๐Ÿ” Bereichsscan: Eine รคuรŸere Schleife durchlรคuft die Werte von 2 bis zur oberen Grenze und รผbergibt jeden Wert an eine wiederverwendbare Prรผfmethode.
  • โœ… Boolesche Methode: CheckPrime gibt false zurรผck, wenn der erste Teiler gefunden wird, und true, wenn die Schleife ohne Treffer abgeschlossen ist.
  • โˆš Divisor beschrรคnkt: Eine Prรผfung bis zur Hรคlfte des Wertes ist korrekt, und dann aufhรถren.ping Die Quadratwurzel liefert das gleiche Ergebnis wesentlich schneller.
  • ๐Ÿงฎ Ergebnismenge: Zwischen 1 und 100 gibt es genau 25 Primzahlen, die mit 97 enden.
  • โšก Siebmethode: Das Sieb des Eratosthenes markiert Vielfache in einem booleschen Array und hat eine Laufzeit von O(n log log n).
  • ๐Ÿงช Verifizierungspraxis: Bevor Sie irgendeiner Implementierung vertrauen, vergewissern Sie sich, dass 2 enthalten und 1 ausgeschlossen ist.

Prim Numbers 1 bis 100 in Java

Was ist eine Primzahl?

A Primzahl Eine Primzahl ist eine Zahl, die nur durch eins oder sich selbst teilbar ist. Sie ist eine natรผrliche Zahl grรถรŸer als eins, die nicht das Produkt zweier kleinerer natรผrlicher Zahlen ist. Beispielsweise ist 11 nur durch eins oder sich selbst teilbar. Weitere Primzahlen sind 2, 3, 5, 7, 11, 13, 17 usw.

Hinweis: 0 und 1 sind keine Primzahlen. 2 ist die einzige gerade Primzahl.

Zwischen 1 und 100 gibt es genau 25 Primzahlen. Die untenstehende Tabelle gruppiert sie nach Dekaden, wodurch das Muster der abnehmenden Anzahl mit zunehmenden Werten sichtbar wird.

Abdeckung Prim Numbers Zu Zรคhlen
1 โ€“ 20 2, 3, 5, 7, 11, 13, 17, 19 8
21 โ€“ 40 23, 29, 31, 37 4
41 โ€“ 60 41, 43, 47, 53, 59 5
61 โ€“ 80 61, 67, 71, 73, 79 5
81 โ€“ 100 83, 89, 97 3

So drucken Sie Prime Numbers Zwischen 1 und 100 Programm in Java

Unten ist die Java Programm zum Drucken von Primzahlen von 1 bis 100:

Programmlogik:

  • Die Hauptmethode der Primzahlprogramm in Java enthรคlt eine Schleife, um die Primzahlen zwischen 1 und 100 nacheinander zu รผberprรผfen.
  • Die Hauptmethode ruft die Methode auf CheckPrime um festzustellen, ob eine Zahl eine Primzahl ist in Java oder nicht.
  • Wir mรผssen eine Eingabezahl, beispielsweise 17, durch die Zahlen von 2 bis 17 teilen und den Rest รผberprรผfen. Ist der Rest 0, ist die Zahl keine Primzahl.
  • Keine Zahl ist durch mehr als die Hรคlfte von sich selbst teilbar. Daher mรผssen wir nur die Zahl, die geprรผft werden soll, durch 2 teilen. Wenn die Eingabe 17 ist, ist die Hรคlfte 8.5, und die Schleife durchlรคuft die Werte von 2 bis 8.
  • If numberToCheck Wenn die Zahl vollstรคndig durch eine andere Zahl teilbar ist, geben wir false zurรผck, und die Schleife wird abgebrochen.
  • If numberToCheck prim ist, geben wir true zurรผck.
  • In der Hauptmethode fรผr Primzahlen 1 bis 100 in Java, prรผfen Sie, ob isPrime ist TRUE und addiere den Wert zur PrimzahlNumbersGefundene Zeichenkette.
  • Drucken Sie zuletzt Primzahlen von 1 bis 100 in Java.

Die Auslagerung der รœberprรผfung in eine eigene Methode ermรถglicht die Wiederverwendbarkeit des Programms. Die Methode `CheckPrime` kann mit jedem beliebigen Obergrenzenwert aufgerufen werden, indem einfach die Variable `maxCheck` geรคndert wird.

public class PrimeNumbers {

    public static void main(String[] args) {

        int i;
        int num = 0;
        int maxCheck = 100; // maxCheck limit till which you want to find prime numbers
        boolean isPrime = true;

        //Empty String
        String primeNumbersFound = "";

        //Start loop 2 to maxCheck
        for (i = 2; i <= maxCheck; i++) {
            isPrime = CheckPrime(i);
            if (isPrime) {
                primeNumbersFound = primeNumbersFound + i + " ";
            }
        }
        System.out.println("Prime numbers from 1 to " + maxCheck + " are:");
        // Print prime numbers from 1 to maxCheck
        System.out.println(primeNumbersFound);
    }
    public static boolean CheckPrime(int numberToCheck) {
        int remainder;
        for (int i = 2; i <= numberToCheck / 2; i++) {
            remainder = numberToCheck % i;
            //if remainder is 0 then the number is not prime and we break the loop. Else continue the loop
            if (remainder == 0) {
                return false;
            }
        }
        return true;

    }

}

Erwartete Ausgabe:

Die Ausgabe der Primzahlen zwischen 1 und 100 in der Java Programm werden:

Prime numbers from 1 to 100 are:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

Der Wert 2 wird รผbergeben, weil die innere Schleifenbedingung erfรผllt ist. i <= 2 / 2 bewertet zu 2 <= 1Das Ergebnis ist sofort falsch, daher gibt die Methode ohne eine einzige Division true zurรผck.

Optimierte Version unter Verwendung der Quadratwurzelgrenze

Das Halbieren der Zahl ist zwar korrekt, fรผhrt aber zu unnรถtigen Rechenoperationen. Teiler treten immer paarweise um die Quadratwurzel auf, daher hat jeder Faktor oberhalb von โˆšn einen Partner darunter, der bereits geprรผft wurde.

public class PrimeNumbersOptimized {

    public static void main(String[] args) {
        int maxCheck = 100;
        int count = 0;
        StringBuilder result = new StringBuilder();

        for (int i = 2; i <= maxCheck; i++) {
            if (isPrime(i)) {
                result.append(i).append(" ");
                count++;
            }
        }

        System.out.println("Prime numbers from 1 to " + maxCheck + " are:");
        System.out.println(result.toString().trim());
        System.out.println("Total primes found: " + count);
    }

    public static boolean isPrime(int n) {
        if (n <= 1) return false;
        if (n == 2) return true;
        if (n % 2 == 0) return false;

        // test only odd divisors up to the square root
        for (int i = 3; i * i <= n; i += 2) {
            if (n % i == 0) return false;
        }
        return true;
    }
}

Ausgang:

Prime numbers from 1 to 100 are:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
Total primes found: 25

๐Ÿ’ก Tipp: StringBuilder ersetzt wiederholte String-Verkettungen innerhalb der Schleife. += on a String erzeugt ein neues Objekt, das messbar wird, sobald die obere Grenze mehrere Tausend erreicht.

Print Prime Numbers Verwendung des Siebs des Eratosthenes

Wenn alle Primzahlen eines Bereichs benรถtigt werden, ist die Probedivision das falsche Verfahren. Das Sieb des Eratosthenes erstellt ein boolesches Array, markiert die Vielfachen jeder Primzahl als zusammengesetzt und liest alle รผbrigen, nicht markierten Zahlen aus.

Die Methode funktioniert in drei Schritten:

  1. Erstelle ein boolesches Array der GrรถรŸe n+1 und gehe davon aus, dass jeder Index ab 2 eine Primzahl ist.
  2. Beginnend mit 2, markiere jedes Vielfache der aktuellen Primzahl als zusammengesetzte Zahl.
  3. Gehe zum nรคchsten nicht markierten Index und wiederhole den Vorgang, bis die Quadratwurzel von n erreicht ist.
import java.util.Arrays;

public class SieveOfEratosthenes {

    public static void main(String[] args) {
        int n = 100;
        boolean[] composite = new boolean[n + 1];

        for (int p = 2; p * p <= n; p++) {
            if (!composite[p]) {
                // start at p*p because smaller multiples are already marked
                for (int multiple = p * p; multiple <= n; multiple += p) {
                    composite[multiple] = true;
                }
            }
        }

        StringBuilder result = new StringBuilder();
        for (int i = 2; i <= n; i++) {
            if (!composite[i]) {
                result.append(i).append(" ");
            }
        }

        System.out.println("Prime numbers from 1 to " + n + " are:");
        System.out.println(result.toString().trim());
    }
}

Ausgang:

Prime numbers from 1 to 100 are:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

Vergleich der drei Ansรคtze

Alle drei Programme geben dieselben 25 Werte aus, daher hรคngt die Wahl ausschlieรŸlich von der GrรถรŸe des Wertebereichs ab.

Ansatz Zeitliche Komplexitรคt Zusรคtzlicher Speicher beste Auswahl
Probeteilung bis n/2 O(nยฒ) O (1) Bis zu einigen Tausend
Probedivision zu โˆšn O(nโˆšn) O (1) Bis zu einigen hunderttausend
Sieb von Eratosthenes O(n log log n) O (n) Millionen von Werten

Schauen Sie in unserem Programm nach, um herauszufinden Primzahlen aus jeder beliebigen Eingabezahl Wenn ein einzelner Wert anstelle eines Bereichs geprรผft werden muss. Weitere รœbungen mit Schleifen finden Sie im Abschnitt [Link einfรผgen]. Fibonacci-Folge in Java, hat das Java Palindromprogrammund die Bubble Sortieralgorithmus in JavaDas vom Sieb verwendete boolesche Array wird im Folgenden nรคher erlรคutert. Java Arrays.

Hรคufig gestellte Fragen

Es sind genau 25. Die Folge beginnt bei 2 und endet bei 97, und die Dichte nimmt mit zunehmender GrรถรŸe der Werte stetig ab.

Die Bedingung der inneren Schleife lautet 2 <= 1, was sofort falsch ist. Daher findet keine Division statt und die Methode gibt true zurรผck. Dieser einzelne Fall sollte in jeder Implementierung getestet werden.

ร„ndern Sie die Variable maxCheck auf 500. Um mit einem Wert รผber 1 zu beginnen, passen Sie stattdessen den Anfangswert des รคuรŸeren Schleifenzรคhlers an und lassen Sie die Prรผfmethode unverรคndert.

Jedes kleinere Vielfache von p enthรคlt bereits einen kleineren Primfaktor und wurde in einem vorherigen Durchlauf markiert. Der Start bei pยฒ vermeidet die Wiederholung dieser Arbeit.

Sie geben รผblicherweise die Probeteilung zurรผck, es sei denn, die Aufgabenstellung erwรคhnt einen groรŸen Bereich oder eine hohe Leistungsfรคhigkeit. Die Angabe der Obergrenze in der Anfrage fรผhrt in der Regel stattdessen zur Siebanalyse.

Primzahlen werden als GrรถรŸen fรผr Hashtabellen und Feature-Buckets gewรคhlt, da sie die Schlรผssel gleichmรครŸig verteilen und Kollisionen reduzieren. Sie dienen auch als Startwerte fรผr die Hashfunktionen, die bei der Feature-Vektorisierung verwendet werden.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: