Java Programm Prime'i printimiseks Numbers alates 1 et 100

⚡ Nutikas kokkuvõte

Programm algarvu 1 kuni 100 tolli printimiseks Java skannib kõiki vahemiku väärtusi ja annab tulemuseks need, millel on täpselt kaks jagajat. See artikkel selgitab definitsiooni, kontrollimismeetodit, täielikku programmi, Eratosthenese sõela ja jõudluse võrdlust kontrollitud väljundiga.

  • 🔢 Määratluse reegel: Algarv on suurem kui 1 ja jagub ainult 1 ja iseendaga, mis välistab 0 ja 1 täielikult.
  • 🔁 Vahemiku skaneerimine: Väline tsükkel liigub väärtusest 2 ülemise piirini ja delegeerib iga väärtuse korduvkasutatavale kontrollimeetodile.
  • Boole'i ​​meetod: CheckPrime tagastab esimese leitud jagaja korral väärtuse „väär“ ja väärtuse „tõene“, kui tsükkel lõpeb ilma vastet leidmata.
  • Jagaja piir: Kuni poole väärtuse testimine on õige ja peatageping ruutjuure juures annab sama vastuse palju kiiremini.
  • 🧮 Tulemuste komplekt: Täpselt 25 algarvu leidub vahemikus 1 kuni 100, lõppedes arvuga 97.
  • Sõela meetod: Eratosthenese sõel märgib tõeväärtusmassiivis kordseid ja töötab ajaga O(n log log n).
  • 🧪 Kontrollimise tava: Enne mis tahes rakenduse usaldamist veenduge, et 2 on kaasatud ja 1 on välja jäetud.

Peamine Numbers 1 kuni 100 tolli Java

Mis on algarv?

A Algarv on arv, mis jagub ainult ühega või iseendaga. See on naturaalarv, mis on suurem kui üks ja mis ei ole kahe väiksema naturaalarvu korrutis. Näiteks 11 jagub ainult ühega või iseendaga. Teised algarvud on 2, 3, 5, 7, 11, 13, 17 jne.

Märge: 0 ja 1 ei ole algarvud. 2 on ainus paaris algarv.

1 ja 100 vahel on täpselt 25 algarvu. Allolev ruudustik rühmitab need kümnendite kaupa, mis muudab väärtuste kasvades hõreneva mustri nähtavaks.

Valik Peamine Numbers Loendama
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

Kuidas printida Prime Numbers 1 kuni 100 programmi Java

Allpool on Java programm algarvude 1 kuni 100 printimiseks:

Programmi loogika:

  • Peamine meetod algarvu programm sisse Java sisaldab tsüklit algarvude 1 kuni 100 ükshaaval kontrollimiseks.
  • Peamine meetod nimetab meetodit CheckPrime et teha kindlaks, kas arv on algarv Java või mitte.
  • Me peame jagama sisendarvu, näiteks 17, väärtustega 2 kuni 17 ja kontrollima jääki. Kui jääk on 0, siis arv ei ole algarv.
  • Ükski arv ei jagu rohkem kui poolega iseendast. Seega peame tsükliga läbima ainult numberToCheck/2. Kui sisend on 17, siis pool on 8.5 ja tsükkel itereerib läbi väärtuste 2 kuni 8.
  • If numberToCheck on täielikult jaguv mõne teise arvuga, tagastame väärtuse „väär“ ja tsükkel katkeb.
  • If numberToCheck on peamine, tagastame tõele.
  • Põhimeetodis algarvude 1 kuni 100 tolli jaoks Java, kontrollige, kas isPrime on TRUE ja lisa väärtus algväärtuseleNumbersLeitud string.
  • Lõpuks printige algarvud vahemikus 1 kuni 100 tolli Java.

Checki eraldamine omaette meetodiks muudab programmi korduvkasutatavaks. Sama CheckPrime'i meetodit saab kutsuda mis tahes ülempiiriga, muutes lihtsalt muutujat 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;

    }

}

Eeldatav väljund:

Algarvu väljund vahemikus 1 kuni 100 Java programm saab:

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äärtus 2 läheb läbi, kuna sisemise tsükli tingimus i <= 2 / 2 hindab 2 <= 1, mis on kohe väär, seega tagastab meetod väärtuse tõene ilma ühegi jagamiseta.

Optimeeritud versioon ruutjuure abil

Arvu jagamine kuni poolega on õige, aga teeb tarbetut tööd. Jagajad esinevad ruutjuure ümber alati paaridena, seega igal teguril, mis on suurem kui √n, on allpool partner, mida on juba kontrollitud.

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äljund:

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

💡 Näpunäide: StringBuilder asendab tsükli sees korduva stringi liitmise. Iga += Stringil loob uue objekti, mis muutub mõõdetavaks, kui ülempiir jõuab mitme tuhandeni.

Prindi Prime Numbers Eratosthenese sõela kasutamine

Kui on vaja leida iga algarvu vahemikus, on proovijagamine vale tööriist. Eratosthenese sõel loob tõeväärtusega massiivi, märgib iga algarvu kordsed liitarvudeks ja loeb üles kõik märkimata jäänud arvud.

Meetod töötab kolmes etapis:

  1. Looge tõeväärtuslik massiiv suurusega n+1 ja eeldage, et iga indeks alates 2-st on algarv.
  2. Alustades 2-st, märkige iga praeguse algarvu kordne liitarvuks.
  3. Liikuge järgmisele märgistamata indeksile ja korrake, kuni n ruutjuur on leitud.
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äljund:

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

Kolme lähenemisviisi võrdlus

Kõik kolm programmi prindivad välja samad 25 väärtust, seega sõltub valik täielikult vahemiku suurusest.

Lähenemine Aja keerukus Lisamälu Parim valik
Proovijagamine n/2-ni O(n²) O (1) Kuni paar tuhat
Proovijagamine √n-iks O(n√n) O (1) Kuni paar sada tuhat
Eratosthenese sõel O(n log log n) O (n) Miljonid väärtused

Vaadake meie programmi, et leida algarvud mis tahes sisendarvust kui tuleb testida üksikut väärtust, mitte vahemikku. Täiendavate tsüklipõhiste harjutuste kohta vaadake üle Fibonacci seeria Java, Java palindroomi programmJa Bubble Sordi algoritm sisse JavaSõela kasutatavat tõeväärtusmassiivi selgitatakse lähemalt jaotises Java massiivid.

KKK

Neid on täpselt 25. Järjestus algab numbriga 2 ja lõpeb numbriga 97 ning tihedus väheneb pidevalt väärtuste suurenedes.

Sisemise tsükli tingimuseks saab 2 <= 1, mis muutub kohe vääraks, seega jagamist ei toimu ja meetod tagastab tõese väärtuse. Seda üksikut juhtumit tasub igas implementatsioonis testida.

Muutke muutuja maxCheck väärtuseks 500. Alustamiseks üle 1 muutke hoopis välimise tsükli loenduri algväärtust ja jätke kontrollimeetod puutumata.

Iga p väiksem kordne sisaldab juba väiksemat algtegurit ja see märgiti ära varasema käigu ajal. p ruudust alustamine väldib selle töö kordamist.

Tavaliselt tagastavad nad proovijagamise, välja arvatud juhul, kui päringus mainitakse suurt vahemikku või jõudlust. Ülempiiri sisestamine päringus annab tavaliselt tulemuseks sõela.

Räsitabelite ja tunnusämbrite suuruste jaoks valitakse algarvud, kuna need jaotavad võtmed ühtlaselt ja vähendavad kokkupõrkeid. Samuti on need tunnuste vektoriseerimisel kasutatavate räsifunktsioonide algväärtused.

Võta see postitus kokku järgmiselt: