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: