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.

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ฤ
CheckPrimeaby 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
numberToCheckjest podzielne przez innฤ liczbฤ w caลoลci, zwracamy faลsz i pฤtla zostaje przerwana. - If
numberToCheckjest liczbฤ pierwszฤ , zwracamy wartoลฤ true. - W metodzie gลรณwnej dla liczb pierwszych od 1 do 100 w Java, sprawdลบ czy isPrime jest
TRUEi 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:
- Utwรณrz tablicฤ wartoลci logicznych o rozmiarze n+1 i zaลรณลผ, ลผe kaลผdy indeks od 2 w gรณrฤ jest liczbฤ pierwszฤ .
- Zaczynajฤ c od 2, oznacz kaลผdฤ wielokrotnoลฤ bieลผฤ cej liczby pierwszej jako liczbฤ zลoลผonฤ .
- 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.
