Java Program do drukowania Prime Numbers od 1 do 100

โšก Inteligentne podsumowanie

Program do drukowania liczb pierwszych od 1 do 100 cali Java Skanuje kaลผdฤ… wartoล›ฤ‡ w zakresie i raportuje te, ktรณre majฤ… dokล‚adnie dwa dzielniki. W tym artykule wyjaล›niono definicjฤ™, metodฤ™ sprawdzania, caล‚y program, sito Eratostenesa oraz porรณwnanie wydajnoล›ci z zweryfikowanymi wynikami.

  • ๐Ÿ”ข Definicja reguล‚y: Liczba pierwsza jest wiฤ™ksza od 1 i podzielna tylko przez 1 i samฤ… siebie, co caล‚kowicie wyklucza 0 i 1.
  • ๐Ÿ” Skanowanie zasiฤ™gu: Pฤ™tla zewnฤ™trzna przechodzi od 2 do gรณrnej granicy i deleguje kaลผdฤ… wartoล›ฤ‡ do wielokrotnego uลผytku metody sprawdzajฤ…cej.
  • โœ… Metoda Booleโ€™a: CheckPrime zwraca false dla pierwszego znalezionego dzielnika i true, gdy pฤ™tla zakoล„czy siฤ™ bez znalezienia dzielnika.
  • โˆš Granica dzielnika: Testowanie do poล‚owy wartoล›ci jest poprawne i zatrzymajping pierwiastek kwadratowy daje ten sam wynik znacznie szybciej.
  • ๐Ÿงฎ Zestaw wynikรณw: Istnieje dokล‚adnie 25 liczb pierwszych z zakresu od 1 do 100, koล„czฤ…cych siฤ™ na 97.
  • โšก Metoda sitowa: Sito Eratostenesa zaznacza wielokrotnoล›ci w tablicy boolowskiej i dziaล‚a w czasie O(n log log n).
  • ๐Ÿงช Praktyka weryfikacyjna: Przed zaufaniem jakiejkolwiek implementacji sprawdลบ, czy 2 jest uwzglฤ™dnione, a 1 wykluczone.

premia Numbers 1 do 100 cali Java

Co to jest liczba pierwsza?

A Liczba pierwsza Liczba pierwsza to liczba podzielna tylko przez jeden lub przez samฤ… siebie. Jest to liczba naturalna wiฤ™ksza od jeden, ktรณra nie jest iloczynem dwรณch mniejszych liczb naturalnych. Na przykล‚ad 11 jest podzielne tylko przez jeden lub przez samฤ… siebie. Inne liczby pierwsze to 2, 3, 5, 7, 11, 13, 17 i tak dalej.

Uwaga: 0 i 1 nie sฤ… liczbami pierwszymi. 2 jest jedynฤ… parzystฤ… liczbฤ… pierwszฤ….

Miฤ™dzy 1 a 100 istnieje dokล‚adnie 25 liczb pierwszych. Poniลผsza tabela grupuje je wedล‚ug dekad, co uwidacznia wzรณr przerzedzania siฤ™ wraz ze wzrostem wartoล›ci.

ล‚odzie premia Numbers Liczyฤ‡
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 wydrukowaฤ‡ Prime Numbers Od 1 do 100 Program w Java

Poniลผej znajduje siฤ™ Java program do drukowania liczb pierwszych od 1 do 100:

Logika programu:

  • Gล‚รณwnฤ… metodฤ… program liczb pierwszych w Java zawiera pฤ™tlฤ™, ktรณra sprawdza kolejno liczby pierwsze od 1 do 100.
  • Metoda gล‚รณwna wywoล‚uje metodฤ™ CheckPrime aby okreล›liฤ‡, czy liczba jest liczbฤ… pierwszฤ… Java lub nie.
  • Musimy podzieliฤ‡ liczbฤ™ wejล›ciowฤ…, powiedzmy 17, przez wartoล›ci od 2 do 17 i sprawdziฤ‡ resztฤ™. Jeล›li reszta wynosi 0, liczba nie jest pierwsza.
  • ลปadna liczba nie jest podzielna przez wiฤ™cej niลผ poล‚owฤ™ samej siebie. Dlatego musimy wykonaฤ‡ pฤ™tlฤ™ po prostu dla funkcji numberToCheck/2. Jeล›li wartoล›ฤ‡ wejล›ciowa to 17, poล‚owa to 8.5, a pฤ™tla bฤ™dzie iterowaฤ‡ po wartoล›ciach od 2 do 8.
  • If numberToCheck jest podzielne przez innฤ… liczbฤ™ w caล‚oล›ci, zwracamy faล‚sz i pฤ™tla zostaje przerwana.
  • If numberToCheck jest liczbฤ… pierwszฤ…, zwracamy wartoล›ฤ‡ true.
  • W metodzie gล‚รณwnej dla liczb pierwszych od 1 do 100 w Java, sprawdลบ czy isPrime jest TRUE i dodaj wartoล›ฤ‡ do liczby pierwszejNumbersZnaleziono ciฤ…g znakรณw.
  • Na koniec wydrukuj liczby pierwsze od 1 do 100 w Java.

Oddzielenie kontroli do osobnej metody sprawia, ลผe โ€‹โ€‹program jest wielokrotnego uลผytku. Tฤ™ samฤ… metodฤ™ CheckPrime moลผna wywoล‚aฤ‡ z dowolnym gรณrnym limitem, po prostu zmieniajฤ…c zmiennฤ… 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;

    }

}

Oczekiwany wynik:

Wynik liczby pierwszej od 1 do 100 w Java program bฤ™dzie:

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

Wartoล›ฤ‡ 2 jest uwzglฤ™dniana, poniewaลผ warunek pฤ™tli wewnฤ™trznej jest speล‚niony i <= 2 / 2 ocenia na 2 <= 1, co od razu jest faล‚szem, wiฤ™c metoda zwraca wartoล›ฤ‡ true bez ani jednego dzielenia.

Zoptymalizowana wersja wykorzystujฤ…ca ograniczenie pierwiastka kwadratowego

Dzielenie do poล‚owy liczby jest poprawne, ale wykonuje niepotrzebnฤ… pracฤ™. Dzielniki zawsze wystฤ™pujฤ… parami wokรณล‚ pierwiastka kwadratowego, wiฤ™c kaลผdy czynnik powyลผej โˆšn ma partnera poniลผej, ktรณry zostaล‚ juลผ sprawdzony.

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

Wyjล›cie:

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

๐Ÿ’ก Wskazรณwka: StringBuilder zastฤ™puje powtarzajฤ…ce siฤ™ ล‚ฤ…czenie ciฤ…gรณw znakรณw wewnฤ…trz pฤ™tli. Kaลผde += na Stringu tworzy nowy obiekt, ktรณry staje siฤ™ mierzalny, gdy gรณrny limit osiฤ…gnie kilka tysiฤ™cy.

Wydrukuj Prime Numbers Korzystanie z sita Eratostenesa

Gdy potrzebna jest kaลผda liczba pierwsza z danego zakresu, dzielenie prรณbne to niewล‚aล›ciwe narzฤ™dzie. Sito Eratostenesa buduje tablicฤ™ boolowskฤ…, oznacza wielokrotnoล›ci kaลผdej liczby pierwszej jako zล‚oลผone i odczytuje to, co pozostaje nieoznaczone.

Metoda ta dziaล‚a w trzech krokach:

  1. Utwรณrz tablicฤ™ wartoล›ci logicznych o rozmiarze n+1 i zaล‚รณลผ, ลผe kaลผdy indeks od 2 w gรณrฤ™ jest liczbฤ… pierwszฤ….
  2. Zaczynajฤ…c od 2, oznacz kaลผdฤ… wielokrotnoล›ฤ‡ bieลผฤ…cej liczby pierwszej jako liczbฤ™ zล‚oลผonฤ….
  3. Przejdลบ do nastฤ™pnego nieoznaczonego indeksu i powtarzaj, aลผ zostanie przekroczony pierwiastek kwadratowy 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());
    }
}

Wyjล›cie:

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

Porรณwnanie trzech podejล›ฤ‡

Wszystkie trzy programy drukujฤ… te same 25 wartoล›ci, wiฤ™c wybรณr zaleลผy wyล‚ฤ…cznie od rozmiaru zakresu.

Podejล›cie Zล‚oลผonoล›ฤ‡ czasowa Dodatkowa pamiฤ™ฤ‡ Najlepszy zakres
Podziaล‚ prรณbny na n/2 O(nยฒ) O (1) Do kilku tysiฤ™cy
Podziaล‚ prรณbny do โˆšn O(nโˆšn) O (1) Do kilkuset tysiฤ™cy
Sito Eratostenesa O(n log log n) Na) Miliony wartoล›ci

Sprawdลบ nasz program, aby znaleลบฤ‡ liczby pierwsze z dowolnej liczby wejล›ciowej gdy konieczne jest przetestowanie pojedynczej wartoล›ci, a nie zakresu. Aby uzyskaฤ‡ wiฤ™cej ฤ‡wiczeล„ z pฤ™tlami, zapoznaj siฤ™ z Ciฤ…g Fibonacciego w JavaThe Java program palindromowyi Bubble Algorytm sortowania w Java. Tablica wartoล›ci logicznych uลผywana przez sito jest wyjaล›niona dalej w Java tablice.

FAQ

Jest ich dokล‚adnie 25. Sekwencja zaczyna siฤ™ od 2 i koล„czy na 97, a gฤ™stoล›ฤ‡ maleje stopniowo w miarฤ™ wzrostu wartoล›ci.

Warunek pฤ™tli wewnฤ™trznej zmienia siฤ™ na 2 <= 1, co natychmiast staje siฤ™ faล‚szem, wiฤ™c dzielenie nie jest wykonywane, a metoda zwraca wartoล›ฤ‡ true. Ten pojedynczy przypadek warto przetestowaฤ‡ w kaลผdej implementacji.

Zmieล„ zmiennฤ… maxCheck na 500. Aby zaczฤ…ฤ‡ od wartoล›ci powyลผej 1, zmieล„ wartoล›ฤ‡ poczฤ…tkowฤ… licznika pฤ™tli zewnฤ™trznej i pozostaw metodฤ™ sprawdzajฤ…cฤ… bez zmian.

Kaลผda mniejsza wielokrotnoล›ฤ‡ p zawiera juลผ mniejszy czynnik pierwszy i zostaล‚a oznaczona we wczeล›niejszym etapie. Rozpoczฤ™cie od p kwadratowego pozwala uniknฤ…ฤ‡ powtarzania tej czynnoล›ci.

Zazwyczaj zwracajฤ… dzielenie prรณbne, chyba ลผe w monicie wspomniano o duลผym zakresie lub wydajnoล›ci. Podanie gรณrnego limitu w ลผฤ…daniu zazwyczaj powoduje wyล›wietlenie sita.

Liczby pierwsze sฤ… wybierane jako rozmiary tablic skrรณtรณw i kubeล‚kรณw cech, poniewaลผ rรณwnomiernie rozprowadzajฤ… klucze i redukujฤ… liczbฤ™ kolizji. Stanowiฤ… one rรณwnieลผ poczฤ…tek funkcji skrรณtu uลผywanych w wektoryzacji cech.

Podsumuj ten post nastฤ™pujฤ…co: