Java Program til at udskrive Prime Numbers fra 1 til 100

⚡ Smart opsummering

Program til at udskrive primtal fra 1 til 100 tommer Java scanner alle værdier i et interval og rapporterer dem med præcis to divisorer. Denne artikel forklarer definitionen, kontrolmetoden, det komplette program, Eratosthenes-sigten og en præstationssammenligning med verificeret output.

  • 🔢 Definitionsregel: Et primtal er større end 1 og kun deleligt med 1 og sig selv, hvilket udelukker 0 og 1 fuldstændigt.
  • 🔁 Områdescanning: En ydre løkke går fra 2 til den øvre grænse og delegerer hver værdi til en genanvendelig kontrolmetode.
  • Boolsk metode: CheckPrime returnerer falsk på den første fundne divisor og sand, når løkken afsluttes uden match.
  • Divisorgrænse: Testning af op til halvdelen af ​​værdien er korrekt, og stopping ved kvadratroden giver det samme svar langt hurtigere.
  • 🧮 Resultatsæt: Der findes præcis 25 primtal mellem 1 og 100, der ender med 97.
  • Siemetode: Eratosthenes-sigten markerer multipla i et boolsk array og kører i O(n log log n) tid.
  • 🧪 Bekræftelsespraksis: Bekræft at 2 er inkluderet og at 1 er ekskluderet, før du stoler på nogen implementering.

Prime Numbers 1 til 100 in Java

Hvad er et primtal?

A Primtal er et tal, der kun er deleligt med én eller sig selv. Det er et naturligt tal større end én, der ikke er et produkt af to mindre naturlige tal. For eksempel er 11 kun deleligt med én eller sig selv. Andre primtal er 2, 3, 5, 7, 11, 13, 17 osv.

Bemærk: 0 og 1 er ikke primtal. 2 er det eneste lige primtal.

Mellem 1 og 100 er der præcis 25 primtal. Gitteret nedenfor grupperer dem efter årti, hvilket gør det udtyndende mønster synligt, efterhånden som værdierne vokser.

Rækkevidde Prime Numbers Tælle
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

Sådan udskriver du Prime Numbers Mellem 1 og 100 Program i Java

Nedenfor er Java program til at udskrive primtal fra 1 til 100:

Program logik:

  • Den primære metode for primtalsprogram i Java indeholder en løkke til at kontrollere primtal mellem 1 og 100 et efter en.
  • Hovedmetoden kalder metoden CheckPrime at afgøre, om et tal er et primtal i Java eller ej.
  • Vi skal dividere et inputtal, f.eks. 17, fra værdierne 2 til 17 og kontrollere resten. Hvis resten er 0, er tallet ikke et primtal.
  • Intet tal er deleligt med mere end halvdelen af ​​sig selv. Så vi skal kun gennemgå numberToCheck/2. Hvis inputtet er 17, er halvdelen 8.5, og løkken vil iterere gennem værdierne 2 til 8.
  • If numberToCheck er fuldstændig delelig med et andet tal, returnerer vi falsk, og løkken brydes.
  • If numberToCheck er prime, vender vi tilbage sandt.
  • I hovedmetoden for primtal 1 til 100 tommer Java, tjek om isPrime er TRUE og læg værdien til primtalletNumbersFundet streng.
  • Udskriv til sidst primtal fra 1 til 100 tommer Java.

At separere checken i sin egen metode er det, der gør programmet genbrugeligt. Den samme CheckPrime-metode kan kaldes med en hvilken som helst øvre grænse blot ved at ændre maxCheck-variablen.

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;

    }

}

Forventet output:

Outputtet af primtallet mellem 1 og 100 i Java program vil være:

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

Værdien 2 bestås, fordi den indre løkkebetingelse i <= 2 / 2 evaluerer til 2 <= 1, som er falsk med det samme, så metoden returnerer sand uden en eneste division.

Optimeret version ved hjælp af kvadratrodsgrænsen

Det er korrekt at dividere op til halvdelen af ​​tallet, men det udfører unødvendigt arbejde. Divisorer optræder altid parvis omkring kvadratroden, så enhver faktor over √n har en partner under sig, som allerede er testet.

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;
    }
}

Output:

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

💡 Tip: StringBuilder erstatter gentagen strengsammenkædning inde i løkken. Hver += on a String opretter et nyt objekt, som bliver målbart, når den øvre grænse når flere tusinde.

Print Prime Numbers Brug af Eratosthenes-sigten

Når alle primtal i et interval er nødvendige, er prøvedivision det forkerte værktøj. Eratosthenes' si opbygger et boolsk array, markerer multiplaene af hvert primtal som sammensat og aflæser det, der forbliver umarkeret.

Metoden fungerer i tre trin:

  1. Opret et boolsk array af størrelse n+1 og antag, at hvert indeks fra 2 og opefter er primt.
  2. Startende ved 2, marker hvert multiplum af det aktuelle primtal som sammensat.
  3. Gå videre til det næste umarkerede indeks og gentag indtil kvadratroden af ​​n er passeret.
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());
    }
}

Output:

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

Sammenligning af de tre tilgange

Alle tre programmer udskriver de samme 25 værdier, så valget afhænger helt af størrelsen på området.

Tilgang Tidskompleksitet Ekstra hukommelse Bedste-serien
Prøvedeling til n/2 O(n²) O (1) Op til et par tusinde
Prøvedivision til √n O(n√n) O (1) Op til et par hundrede tusinde
Sigte af Eratosthener O(n log log n) O (n) Millioner af værdier

Tjek vores program for at finde primtal fra et hvilket som helst inputtal når en enkelt værdi i stedet for et interval skal testes. For yderligere loop-drevne øvelser, gennemgå Fibonacci-rækken i Java, Java palindromprogram, og Bubble Sorter algoritme ind JavaDet boolske array, der bruges af sieven, forklares yderligere i Java arrays.

Ofte Stillede Spørgsmål

Der er præcis 25. Sekvensen begynder ved 2 og slutter ved 97, og tætheden falder støt, efterhånden som værdierne bliver større.

Den indre løkkebetingelse bliver 2 <= 1, hvilket er falsk med det samme, så ingen division udføres, og metoden returnerer sand. Dette ene tilfælde er værd at teste i hver implementering.

Skift maxCheck-variablen til 500. For at starte over 1 skal du i stedet justere startværdien af ​​den ydre løkketæller og lade kontrolmetoden være uændret.

Hvert mindre multiplum af p indeholder allerede en mindre primfaktor og blev markeret under en tidligere gennemgang. Ved at starte ved p i anden undgår man at gentage dette arbejde.

De returnerer typisk prøvedivision, medmindre prompten nævner et stort interval eller en stor ydeevne. Angivelse af den øvre grænse i anmodningen producerer normalt sigten i stedet.

Primer vælges som hashtabel- og feature-bucket-størrelser, fordi de fordeler nøgler jævnt og reducerer kollisioner. De danner også kilde til hashing-funktioner, der bruges i feature-vektorisering.

Opsummer dette indlæg med: