[SOL] Java - Esercizio nr. 51
Spiegazione del Programma: Numeri Primi
Cosa fa il programma
Questo programma Java trova e stampa tutti i numeri primi compresi tra 2 e un numero N inserito dall'utente.
Ricorda: Un numero primo è un numero naturale maggiore di 1 che è divisibile solo per 1 e per se stesso (ad esempio: 2, 3, 5, 7, 11, 13...).
Analisi del codice
import java.util.Scanner;
public class NumeriPrimi {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Inserisci N: ");
int n = input.nextInt();
System.out.println("Numeri primi tra 2 e " + n + ":");
for (int i = 2; i <= n; i++) {
boolean primo = true;
for (int j = 2; j < i; j++) {
if (i % j == 0) {
primo = false;
}
}
if (primo) {
System.out.println(i);
}
}
input.close();
}
}
Come funziona passo per passo
1. Preparazione e input
- Il programma importa la classe
Scannerper leggere l'input dell'utente - Chiede all'utente di inserire un numero N
- Memorizza questo numero nella variabile
n
2. Ciclo principale (esterno)
for (int i = 2; i <= n; i++)
- Esamina tutti i numeri da 2 fino a N (incluso)
- Per ogni numero
i, verifica se è primo
3. Verifica se un numero è primo
boolean primo = true;
for (int j = 2; j < i; j++) {
if (i % j == 0) {
primo = false;
}
}
Per ogni numero i:
- Inizialmente assume che sia primo (
primo = true) - Controlla se
iè divisibile per qualche numerojcompreso tra 2 ei-1 - Se trova un divisore (resto della divisione = 0), allora
inon è primo - L'operatore
%calcola il resto della divisione
4. Stampa del risultato
if (primo) {
System.out.println(i);
}
- Se dopo tutti i controlli
primoè ancoratrue, stampa il numero
Esempio di esecuzione
Se l'utente inserisce N = 10, il programma:
- Controlla il numero 2: non ha divisori tra 2 e 1 → è primo
- Controlla il numero 3: non ha divisori tra 2 e 2 → è primo
- Controlla il numero 4: è divisibile per 2 → non è primo
- Controlla il numero 5: non ha divisori tra 2 e 4 → è primo
- E così via...
Output finale:
Numeri primi tra 2 e 10:
2
3
5
7
Punti chiave da ricordare
- Il programma usa un algoritmo di forza bruta: per ogni numero controlla tutti i possibili divisori
- Il ciclo interno si ferma a
j < iperché non serve controllare se un numero è divisibile per se stesso - La variabile
boolean primofunziona come una "bandiera" che indica se il numero è primo o no
import java.util.Scanner;
public class NumeriPrimi {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Inserisci N: ");
int n = input.nextInt();
System.out.println("Numeri primi tra 2 e " + n + ":");
for (int i = 2; i <= n; i++) {
boolean primo = true;
for (int j = 2; j < i; j++) {
if (i % j == 0) {
primo = false;
}
}
if (primo) {
System.out.println(i);
}
}
input.close();
}
}