Java Programma per stampare Prime Numbers da 1 a 100
โก Riepilogo intelligente
Programma per stampare numeri primi da 1 a 100 pollici Java Questo algoritmo analizza ogni valore all'interno di un intervallo e segnala quelli che hanno esattamente due divisori. L'articolo illustra la definizione, il metodo di verifica, il programma completo, il Crivello di Eratostene, e un confronto delle prestazioni con risultati verificati.

Cos'รจ un numero primo?
A Numero primo Un numero primo รจ un numero divisibile solo per uno o per se stesso. ร un numero naturale maggiore di uno che non รจ il prodotto di due numeri naturali piรน piccoli. Ad esempio, 11 รจ divisibile solo per uno o per se stesso. Altri numeri primi sono 2, 3, 5, 7, 11, 13, 17 e cosรฌ via.
Nota: 0 e 1 non sono numeri primi. 2 รจ lโunico numero primo pari.
Tra 1 e 100 ci sono esattamente 25 numeri primi. La griglia sottostante li raggruppa per decennio, rendendo visibile la progressiva diminuzione del numero di numeri primi all'aumentare dei valori.
| Portata | Prima Numbers | Contare |
|---|---|---|
| 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 |
Come stampare Prime Numbers Tra 1 e 100 Programma in Java
Di seguito รจ il Java programma per stampare i numeri primi da 1 a 100:
Logica del programma:
- Il metodo principale del programma di numeri primi in Java contiene un ciclo per controllare uno per uno i numeri primi compresi tra 1 e 100.
- Il metodo main chiama il metodo
CheckPrimeper determinare se un numero รจ un numero primo in Java o non. - Dobbiamo dividere un numero dato, ad esempio 17, per i valori compresi tra 2 e 17 e controllare il resto. Se il resto รจ 0, il numero non รจ primo.
- Nessun numero รจ divisibile per piรน della metร di se stesso. Quindi, dobbiamo iterare solo su numeroDaControllare/2. Se l'input รจ 17, la metร รจ 8.5 e il ciclo itererร sui valori da 2 a 8.
- If
numberToCheckse รจ interamente divisibile per un altro numero, restituiamo false e il ciclo viene interrotto. - If
numberToCheckรจ primo, restituiamo vero. - Nel metodo principale per i numeri primi da 1 a 100 in Java, verifica se isPrime รจ
TRUEe aggiungere il valore al numero primoNumbersStringa trovata. - Infine, stampa i numeri primi da 1 a 100 in Java.
Separare il controllo in un metodo a sรฉ stante รจ ciรฒ che rende il programma riutilizzabile. Lo stesso metodo CheckPrime puรฒ essere chiamato con qualsiasi limite superiore semplicemente modificando la variabile 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;
}
}
Uscita prevista:
L'output del numero primo compreso tra 1 e 100 nel Java Programma sarร :
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
Il valore 2 passa perchรฉ la condizione del ciclo interno i <= 2 / 2 valuta a 2 <= 1, che รจ subito falso, quindi il metodo restituisce vero senza alcuna divisione.
Versione ottimizzata utilizzando il limite della radice quadrata
Dividere fino a metร del numero รจ corretto, ma esegue un lavoro non necessario. I divisori si presentano sempre a coppie attorno alla radice quadrata, quindi ogni fattore maggiore di โn ha un corrispondente minore che รจ giร stato testato.
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; } }
Produzione:
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
Suggerimento: StringBuilder sostituisce la concatenazione ripetuta di stringhe all'interno del ciclo. += su una stringa crea un nuovo oggetto, che diventa misurabile una volta che il limite superiore raggiunge diverse migliaia.
Stampa Focus Numbers Utilizzando il crivello di Eratostene
Quando รจ necessario individuare tutti i numeri primi di un intervallo, la divisione per tentativi non รจ lo strumento adatto. Il Crivello di Eratostene costruisce una matrice booleana, contrassegna i multipli di ciascun numero primo come composti e legge ciรฒ che rimane non contrassegnato.
Il metodo si articola in tre fasi:
- Crea un array booleano di dimensione n+1 e supponi che ogni indice da 2 in su sia primo.
- A partire da 2, contrassegna ogni multiplo del numero primo corrente come composto.
- Passa all'indice successivo non contrassegnato e ripeti l'operazione finchรฉ non viene superata la radice quadrata di 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()); } }
Produzione:
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
Confronto dei tre approcci
Tutti e tre i programmi stampano gli stessi 25 valori, quindi la scelta dipende interamente dalla dimensione dell'intervallo.
| Approccio | Complessitร temporale | Memoria extra | gamma piรน piccola |
|---|---|---|---|
| Divisione della prova a n/2 | O(nยฒ) | O (1) | Fino a qualche migliaio |
| Divisione di prova in โn | O(nโn) | O (1) | Fino a qualche centinaio di migliaia |
| Setaccio di Eratostene | O(n log log n) | O (n) | Milioni di valori |
Controlla il nostro programma per trovare numeri primi da qualsiasi numero di input quando รจ necessario testare un singolo valore anzichรฉ un intervallo. Per ulteriori esercizi basati sui cicli, rivedere il serie di Fibonacci in Java, il Java programma palindromo Bubble Algoritmo di ordinamento in JavaL'array booleano utilizzato dal setaccio รจ spiegato ulteriormente in Java array.
