Leggere N e visualizzare tutti i numeri primi compresi tra 2 e N

[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 Scanner per 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 numero j compreso tra 2 e i-1
  • Se trova un divisore (resto della divisione = 0), allora i non è primo
  • L'operatore % calcola il resto della divisione

4. Stampa del risultato

if (primo) {
    System.out.println(i);
}
  • Se dopo tutti i controlli primo è ancora true, stampa il numero

Esempio di esecuzione

Se l'utente inserisce N = 10, il programma:

  1. Controlla il numero 2: non ha divisori tra 2 e 1 → è primo
  2. Controlla il numero 3: non ha divisori tra 2 e 2 → è primo
  3. Controlla il numero 4: è divisibile per 2 → non è primo
  4. Controlla il numero 5: non ha divisori tra 2 e 4 → è primo
  5. 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 < i perché non serve controllare se un numero è divisibile per se stesso
  • La variabile boolean primo funziona 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();
    }
}