Java Program pro tisk Prime Numbers od 1 do 100

โšก Chytrรฉ shrnutรญ

Program pro tisk prvoฤรญsla od 1 do 100 palcลฏ Java prohledรกvรก kaลพdou hodnotu v rozsahu a hlรกsรญ ty s pล™esnฤ› dvฤ›ma dฤ›liteli. Tento ฤlรกnek vysvฤ›tluje definici, kontrolnรญ metodu, kompletnรญ program, Eratosthenovo sรญto a porovnรกnรญ vรฝkonu s ovฤ›ล™enรฝm vรฝstupem.

  • ๐Ÿ”ข Definice pravidla: Prvoฤรญslo je vฤ›tลกรญ neลพ 1 a dฤ›litelnรฉ pouze 1 a samo sebou, coลพ 0 a 1 zcela vyluฤuje.
  • ๐Ÿ” Skenovรกnรญ rozsahu: Vnฤ›jลกรญ smyฤka prochรกzรญ od 2 k hornรญ hranici a deleguje kaลพdou hodnotu opakovanฤ› pouลพitelnรฉ kontrolnรญ metodฤ›.
  • (Tj. Booleovskรก metoda: Funkce CheckPrime vracรญ hodnotu false pล™i prvnรญm nalezenรฉm dฤ›liteli a hodnotu true, kdyลพ smyฤka skonฤรญ bez shody.
  • โˆš Dฤ›litel omezenรฝ: Testovรกnรญ do poloviny hodnoty je sprรกvnรฉ a zastavteping u druhรฉ odmocniny se dostaneme ke stejnรฉ odpovฤ›di mnohem rychleji.
  • ๐Ÿงฎ Sada vรฝsledkลฏ: Mezi 1 a 100 existuje pล™esnฤ› 25 prvoฤรญsel, konฤรญcรญch ฤรญslem 97.
  • โšก Metoda sรญtovรกnรญ: Eratosthenovo sรญto oznaฤuje nรกsobky v booleovskรฉm poli a bฤ›ลพรญ za ฤas O(n log log n).
  • ๐Ÿงช Ovฤ›ล™ovacรญ postup: Pล™ed dลฏvฤ›ล™ovรกnรญm jakรฉkoli implementaci ovฤ›ล™te, ลพe je zahrnuta moลพnost 2 a ลพe je vylouฤena moลพnost 1.

pojistnรฉ Numbers 1 aลพ 100 in Java

Co je prvoฤรญslo?

A Prvoฤรญslo je ฤรญslo, kterรฉ je dฤ›litelnรฉ pouze jednou nebo samo sebou. Je to pล™irozenรฉ ฤรญslo vฤ›tลกรญ neลพ jedna, kterรฉ nenรญ souฤinem dvou menลกรญch pล™irozenรฝch ฤรญsel. Napล™รญklad 11 je dฤ›litelnรฉ pouze jednou nebo samo sebou. Dalลกรญ prvoฤรญsla jsou 2, 3, 5, 7, 11, 13, 17 atd.

Poznรกmka: 0 a 1 nejsou prvoฤรญsla. 2 je jedinรฉ sudรฉ prvoฤรญslo.

Mezi 1 a 100 se nachรกzรญ pล™esnฤ› 25 prvoฤรญsel. Mล™รญลพka nรญลพe je seskupuje podle dekรกdy, coลพ zviditelลˆuje vzorec ztenฤovรกnรญ s rostoucรญmi hodnotami.

Rozsah pojistnรฉ Numbers Poฤรญtat
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

Jak tisknout Prime Numbers Mezi 1 aลพ 100 programovรฝmi palci Java

Nรญลพe je Java program pro tisk prvoฤรญsel od 1 do 100:

Programovรก logika:

  • Hlavnรญ metoda program prvoฤรญsel v Java obsahuje smyฤku pro kontrolu prvoฤรญsel od 1 do 100 jedno po druhรฉm.
  • Hlavnรญ metoda volรก metodu CheckPrime zjistit, zda je ฤรญslo prvoฤรญslem v Java nebo ne.
  • Potล™ebujeme vydฤ›lit vstupnรญ ฤรญslo, ล™eknฤ›me 17, hodnotami od 2 do 17 a zkontrolovat zbytek. Pokud je zbytek 0, ฤรญslo nenรญ prvoฤรญslo.
  • ลฝรกdnรฉ ฤรญslo nenรญ dฤ›litelnรฉ vรญce neลพ polovinou sebe sama. Takลพe musรญme projรญt pouze numberToCheck/2. Pokud je vstup 17, polovina je 8.5 a smyฤka bude iterovat pล™es hodnoty 2 aลพ 8.
  • If numberToCheck je zcela dฤ›litelnรฉ jinรฝm ฤรญslem, vrรกtรญme false a smyฤka je pล™eruลกena.
  • If numberToCheck je prvoฤรญslo, vracรญme true.
  • V hlavnรญ metodฤ› pro prvoฤรญsla 1 aลพ 100 palcลฏ Java, zkontrolujte, zda je isPrime TRUE a pล™iฤtฤ›te hodnotu k prvoฤรญsluNumbersNalezen ล™etฤ›zec.
  • Nakonec vytisknฤ›te prvoฤรญsla od 1 do 100 palcลฏ Java.

Oddฤ›lenรญ kontroly do vlastnรญ metody umoลพลˆuje opakovanรฉ pouลพitรญ programu. Stejnou metodu CheckPrime lze volat s libovolnou hornรญ hranicรญ pouhou zmฤ›nou promฤ›nnรฉ maxCheck.

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;

    }

}

Oฤekรกvanรฝ vรฝstup:

Vรฝstup prvoฤรญsla mezi 1 a 100 v Java program bude:

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

Hodnota 2 projde, protoลพe podmรญnka vnitล™nรญ smyฤky i <= 2 / 2 vyhodnocuje se jako 2 <= 1, coลพ je okamลพitฤ› nepravdivรฉ, takลพe metoda vracรญ hodnotu true bez jedinรฉho dฤ›lenรญ.

Optimalizovanรก verze s vyuลพitรญm odmocninovรฉ hranice

Dฤ›lenรญ aลพ do poloviny ฤรญsla je sprรกvnรฉ, ale provรกdรญ zbyteฤnou prรกci. Dฤ›litelรฉ se vลพdy vyskytujรญ v pรกrech kolem druhรฉ odmocniny, takลพe jakรฝkoli dฤ›litel nad โˆšn mรก partnera pod nรญm, kterรฝ jiลพ byl otestovรกn.

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

Vรฝstup:

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 nahrazuje opakovanรฉ zล™etฤ›zenรญ ล™etฤ›zcลฏ uvnitล™ smyฤky. Kaลพdรฝ += na ล™etฤ›zci vytvoล™รญ novรฝ objekt, kterรฝ se stane mฤ›ล™itelnรฝm, jakmile hornรญ limit dosรกhne nฤ›kolika tisรญc.

Print Prime Numbers Pouลพitรญ Eratosthenova sรญta

Pokud je potล™eba kaลพdรฉ prvoฤรญslo v danรฉm rozsahu, zkuลกebnรญ dฤ›lenรญ je ลกpatnรฝ nรกstroj. Eratosthenovo sรญto vytvoล™รญ booleovskรฉ pole, oznaฤรญ nรกsobky kaลพdรฉho prvoฤรญsla jako sloลพenรฉ a pล™eฤte vลกe, co zลฏstane neoznaฤenรฉ.

Metoda funguje ve tล™ech krocรญch:

  1. Vytvoล™te booleovskรฉ pole o velikosti n+1 a pล™edpoklรกdejte, ลพe kaลพdรฝ index od 2 vรฝลกe je prvoฤรญslo.
  2. Poฤรญnaje ฤรญslem 2 oznaฤte kaลพdรฝ nรกsobek aktuรกlnรญho prvoฤรญsla jako sloลพenรฝ.
  3. Pล™ejdฤ›te na dalลกรญ neoznaฤenรฝ index a opakujte, dokud nedosรกhnete druhรฉ odmocniny z n.
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());
    }
}

Vรฝstup:

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

Porovnรกnรญ tล™รญ pล™รญstupลฏ

Vลกechny tล™i programy vytisknou stejnรฝch 25 hodnot, takลพe volba zรกvisรญ vรฝhradnฤ› na velikosti rozsahu.

Pล™รญstup ฤŒasovรก sloลพitost Extra pamฤ›ลฅ Nejlepลกรญ dosah
Zkuลกebnรญ dฤ›lenรญ na n/2 O(nยฒ) O (1) Aลพ nฤ›kolik tisรญc
Zkuลกebnรญ dฤ›lenรญ na โˆšn O(nโˆšn) O (1) Aลพ nฤ›kolik set tisรญc
Sรญto Eratosthenes O(n log log n) O (n) Miliony hodnot

Podรญvejte se na nรกลก program a zjistฤ›te prvoฤรญsla z libovolnรฉho vstupnรญho ฤรญsla kdyลพ je nutnรฉ testovat jednu hodnotu, nikoli rozsah. Dalลกรญ cviฤenรญ ล™รญzenรก smyฤkou naleznete v Fibonacciho ล™ada v Javase Java palindromovรฝ programA Bubble Algoritmus ล™azenรญ v JavaBooleovskรฉ pole pouลพรญvanรฉ sรญtem je dรกle vysvฤ›tleno v Java pole.

Nejฤastฤ›jลกรญ dotazy

Je jich pล™esnฤ› 25. Posloupnost zaฤรญnรก na ฤรญsle 2 a konฤรญ na ฤรญsle 97 a hustota se s rostoucรญmi hodnotami neustรกle sniลพuje.

Podmรญnka vnitล™nรญho cyklu se stรกvรก 2 <= 1, coลพ je okamลพitฤ› nepravdivรฉ, takลพe se neprovede ลพรกdnรฉ dฤ›lenรญ a metoda vrรกtรญ hodnotu true. Tento jedinรฝ pล™รญpad stojรญ za testovรกnรญ v kaลพdรฉ implementaci.

Zmฤ›ลˆte promฤ›nnou maxCheck na 500. Chcete-li zaฤรญt nad 1, upravte poฤรกteฤnรญ hodnotu ฤรญtaฤe vnฤ›jลกรญ smyฤky a ponechte kontrolnรญ metodu nedotฤenou.

Kaลพdรฝ menลกรญ nรกsobek p jiลพ obsahuje menลกรญho prvoฤรญsla a byl oznaฤen v dล™รญvฤ›jลกรญm kroku. Zaฤรกtek od p na druhou umoลพลˆuje vyhnout se opakovรกnรญ tรฉto prรกce.

Obvykle vracejรญ zkuลกebnรญ dฤ›lenรญ, pokud vรฝzva nezmiลˆuje velkรฝ rozsah nebo vรฝkon. Uvedenรญ hornรญ meze v poลพadavku obvykle mรญsto toho vyvolรก sรญto.

Prvoฤรญsla jsou volena jako velikosti haลกovacรญch tabulek a bucketลฏ pล™รญznakลฏ, protoลพe rovnomฤ›rnฤ› rozdฤ›lujรญ klรญฤe a sniลพujรญ kolize. Takรฉ poskytujรญ vรฝchozรญ hodnoty pro haลกovacรญ funkce pouลพรญvanรฉ pล™i vektorizaci pล™รญznakลฏ.

Shrลˆte tento pล™รญspฤ›vek takto: