Java Program pentru imprimare Prime Numbers de la 1 la 100

โšก Rezumat inteligent

Program pentru a imprima numฤƒrul prim de la 1 la 100 in Java scaneazฤƒ fiecare valoare dintr-un interval ศ™i raporteazฤƒ valorile cu exact doi divizori. Acest articol explicฤƒ definiศ›ia, metoda de verificare, programul complet, sita lui Eratostene ศ™i o comparaศ›ie a performanศ›ei cu rezultatul verificat.

  • ๐Ÿ”ข Regula definiศ›iei: Un numฤƒr prim este mai mare decรขt 1 ศ™i se divide doar cu 1 ศ™i cu el รฎnsuศ™i, ceea ce exclude complet 0 ศ™i 1.
  • ๐Ÿ” Scanare de razฤƒ: O buclฤƒ exterioarฤƒ parcurge distanศ›a de la 2 pรขnฤƒ la limita superioarฤƒ ศ™i delegฤƒ fiecare valoare unei metode de verificare reutilizabile.
  • โœ… Metoda booleanฤƒ: CheckPrime returneazฤƒ valoarea falsฤƒ pentru primul divizor gฤƒsit ศ™i valoarea adevฤƒratฤƒ cรขnd bucla se terminฤƒ fฤƒrฤƒ o potrivire.
  • โˆš Limita divizorului: Testarea pรขnฤƒ la jumฤƒtate din valoare este corectฤƒ ศ™i opriศ›iping la rฤƒdฤƒcina pฤƒtratฤƒ produce acelaศ™i rฤƒspuns mult mai rapid.
  • ๐Ÿงฎ Set de rezultate: Existฤƒ exact 25 de numere prime รฎntre 1 ศ™i 100, care se terminฤƒ cu 97.
  • โšก Metoda de sitare: Sita lui Eratostene marcheazฤƒ multiplii รฎntr-un tablou boolean ศ™i ruleazฤƒ รฎn timp O(n log log n).
  • ๐Ÿงช Practicฤƒ de verificare: Confirmaศ›i cฤƒ 2 este inclus ศ™i cฤƒ 1 este exclus รฎnainte de a acorda รฎncredere oricฤƒrei implementฤƒri.

Prim Numbers 1 - 100 in Java

Ce este un numฤƒr prim?

A Numฤƒr prim este un numฤƒr care este divizibil doar cu unu sau cu el รฎnsuศ™i. Este un numฤƒr natural mai mare decรขt unu care nu este produsul a douฤƒ numere naturale mai mici. De exemplu, 11 este divizibil doar cu unu sau cu el รฎnsuศ™i. Alte numere prime sunt 2, 3, 5, 7, 11, 13, 17 ศ™i aศ™a mai departe.

Notฤƒ: 0 ศ™i 1 nu sunt numere prime. 2 este singurul numฤƒr prim par.

รŽntre 1 ศ™i 100 existฤƒ exact 25 de numere prime. Grila de mai jos le grupeazฤƒ pe decade, ceea ce face vizibil modelul de subศ›iere pe mฤƒsurฤƒ ce valorile cresc.

Gamฤƒ Prim Numbers Conta
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

Cum se imprimฤƒ Prime Numbers รŽntre 1 ศ™i 100 Program รฎn Java

Mai jos este Java program pentru a imprima numere prime de la 1 la 100:

Logica programului:

  • Metoda principalฤƒ a program numere prime รฎn Java conศ›ine o buclฤƒ pentru verificarea numerelor prime รฎntre 1 ศ™i 100, unul cรขte unul.
  • Metoda principalฤƒ numeศ™te metoda CheckPrime pentru a determina dacฤƒ un numฤƒr este un numฤƒr prim รฎn Java sau nu.
  • Trebuie sฤƒ รฎmpฤƒrศ›im un numฤƒr introdus, sฤƒ zicem 17, la valorile de la 2 la 17 ศ™i sฤƒ verificฤƒm restul. Dacฤƒ restul este 0, numฤƒrul nu este prim.
  • Niciun numฤƒr nu este divizibil cu mai mult de jumฤƒtate din el รฎnsuศ™i. Aศ™adar, trebuie sฤƒ parcurgem doar numberToCheck/2. Dacฤƒ intrarea este 17, jumฤƒtatea este 8.5, iar bucla va itera prin valorile de la 2 la 8.
  • If numberToCheck este รฎn รฎntregime divizibil cu un alt numฤƒr, returnฤƒm fals, iar bucla este รฎntreruptฤƒ.
  • If numberToCheck este prim, revenim adevฤƒrat.
  • รŽn metoda principalฤƒ pentru numerele prime de la 1 la 100 in Java, verificaศ›i dacฤƒ isPrime este TRUE ศ™i adฤƒugaศ›i valoarea la numฤƒrul primNumbersAm gฤƒsit ศ™ir de caractere.
  • รŽn cele din urmฤƒ, imprimaศ›i numere prime de la 1 la 100 in Java.

Separarea verificฤƒrii รฎntr-o metodฤƒ proprie este ceea ce face ca programul sฤƒ fie reutilizabil. Aceeaศ™i metodฤƒ CheckPrime poate fi apelatฤƒ cu orice limitฤƒ superioarฤƒ pur ศ™i simplu prin modificarea variabilei 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;

    }

}

Ieศ™ire preconizatฤƒ:

Rezultatul numฤƒrului prim รฎntre 1 ศ™i 100 รฎn Java program va fi:

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

Valoarea 2 trece deoarece condiศ›ia buclei interne i <= 2 / 2 evalueazฤƒ la 2 <= 1, care este fals imediat, deci metoda returneazฤƒ adevฤƒrat fฤƒrฤƒ o singurฤƒ diviziune.

Versiune optimizatฤƒ folosind limita rฤƒdฤƒcinii pฤƒtrate

รŽmpฤƒrศ›irea la jumฤƒtate din numฤƒr este corectฤƒ, dar implicฤƒ o operaศ›iune inutilฤƒ. Divizorii apar รฎntotdeauna รฎn perechi รฎn jurul rฤƒdฤƒcinii pฤƒtrate, deci orice factor mai mare decรขt โˆšn are un partener sub el, care a fost deja testat.

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

ieศ™ire:

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

๐Ÿ’ก Sfat: StringBuilder รฎnlocuieศ™te concatenarea repetatฤƒ de ศ™iruri de caractere รฎn interiorul buclei. Fiecare += pe un ศ™ir de caractere creeazฤƒ un obiect nou, care devine mฤƒsurabil odatฤƒ ce limita superioarฤƒ atinge cรขteva mii.

Print Prime Numbers Folosind sita lui Eratostene

Cรขnd este nevoie de fiecare numฤƒr prim dintr-un interval, รฎmpฤƒrศ›irea prin รฎncercฤƒri este instrumentul greศ™it. Sita lui Eratostene construieศ™te o matrice booleanฤƒ, marcheazฤƒ multiplii fiecฤƒrui numฤƒr prim ca fiind compuศ™i ศ™i citeศ™te tot ce rฤƒmรขne nemarcat.

Metoda funcศ›ioneazฤƒ รฎn trei etape:

  1. Creaศ›i un tablou boolean de dimensiunea n+1 ศ™i presupuneศ›i cฤƒ fiecare indice de la 2 รฎn sus este prim.
  2. รŽncepรขnd de la 2, marcaศ›i fiecare multiplu al numฤƒrului prim curent ca fiind compus.
  3. Se avanseazฤƒ la urmฤƒtorul index nemarcat ศ™i se repetฤƒ pรขnฤƒ cรขnd se trece rฤƒdฤƒcina pฤƒtratฤƒ a lui 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());
    }
}

ieศ™ire:

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

Compararea celor trei abordฤƒri

Toate cele trei programe afiศ™eazฤƒ aceleaศ™i 25 de valori, deci alegerea depinde รฎn รฎntregime de dimensiunea intervalului.

Abordarea Complexitatea timpului Memorie suplimentarฤƒ Cea mai bunฤƒ gamฤƒ
รŽmpฤƒrศ›irea รฎncercฤƒrii la n/2 O(nยฒ) O (1) Pรขnฤƒ la cรขteva mii
รŽmpฤƒrศ›irea de รฎncercare la โˆšn O(nโˆšn) O (1) Pรขnฤƒ la cรขteva sute de mii
Sita lui Eratosthenes O(n log log n) O (n) Milioane de valori

Verificaศ›i programul nostru pentru a afla numere prime din orice numฤƒr de intrare cรขnd trebuie testatฤƒ o singurฤƒ valoare, mai degrabฤƒ decรขt un interval. Pentru exerciศ›ii suplimentare bazate pe bucle, consultaศ›i Seria Fibonacci รฎn Java, Java program palindrom, ลži Bubble Sortaศ›i algoritmul JavaTabloul boolean utilizat de sivetฤƒ este explicat mai detaliat รฎn Java matrice.

รŽntrebฤƒri frecvente

Sunt exact 25. Secvenศ›a รฎncepe de la 2 ศ™i se terminฤƒ la 97, iar densitatea scade constant pe mฤƒsurฤƒ ce valorile cresc.

Condiศ›ia buclei interne devine 2 <= 1, ceea ce este fals imediat, deci nu se executฤƒ nicio รฎmpฤƒrศ›ire ศ™i metoda returneazฤƒ true. Acest caz singular meritฤƒ testat รฎn fiecare implementare.

Schimbaศ›i variabila maxCheck la 500. Pentru a รฎncepe peste 1, ajustaศ›i valoarea iniศ›ialฤƒ a contorului buclei exterioare ศ™i lฤƒsaศ›i metoda de verificare neschimbatฤƒ.

Fiecare multiplu mai mic al lui p conศ›ine deja un factor prim mai mic ศ™i a fost marcat รฎntr-o trecere anterioarฤƒ. Pornirea de la p la pฤƒtrat evitฤƒ repetarea acestei operaศ›iuni.

De obicei, acestea returneazฤƒ o diviziune prin รฎncercare, cu excepศ›ia cazului รฎn care promptul menศ›ioneazฤƒ un interval sau o performanศ›ฤƒ mare. Indicarea limitei superioare รฎn cerere produce de obicei sita.

Numerele prime sunt alese ca dimensiuni ale tabelelor de hash ศ™i ale compartimentelor de caracteristici deoarece distribuie cheile uniform ศ™i reduc coliziunile. De asemenea, ele introduc funcศ›ii de hash utilizate รฎn vectorizarea caracteristicilor.

Rezumaศ›i aceastฤƒ postare cu: