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.
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
CheckPrimeet 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
numberToCheckon täielikult jaguv mõne teise arvuga, tagastame väärtuse „väär“ ja tsükkel katkeb. - If
numberToCheckon peamine, tagastame tõele. - Põhimeetodis algarvude 1 kuni 100 tolli jaoks Java, kontrollige, kas isPrime on
TRUEja 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:
- Looge tõeväärtuslik massiiv suurusega n+1 ja eeldage, et iga indeks alates 2-st on algarv.
- Alustades 2-st, märkige iga praeguse algarvu kordne liitarvuks.
- 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.

