Estratto del documento

Esercizio di laboratorio

Argomento: uso di array

Il Crivello di Eratostene è un noto algoritmo per la ricerca dei numeri primi minori di un certo valore massimo MAX, ed è così specificato:

  • Si predispone un array di MAX valori booleani. Ogni elemento dell'array "rappresenta" il numero intero corrispondente al proprio indice nell'array.
  • Se e solo se l'elemento è true, allora il numero corrispondente è stato eliminato dall'insieme dei numeri primi, cioè non è un numero primo.
  • All'inizio si suppone che tutti i numeri siano primi; successivamente, si considera ciascun numero intero maggiore di uno, in ordine crescente, e si eliminano tutti i numeri che ne sono multipli, contrassegnandoli opportunamente nell'array.
  • Al termine, i numeri rimasti (ovvero quelli i cui corrispondenti elementi nell'array valgono ancora false) sono tutti e soli i numeri primi cercati, non essendo multipli di alcun numero.

Scrivere un programma che realizza il Crivello di Eratostene per identificare i numeri primi minori di un valore (intero positivo) MAX fornito dall'utente attraverso l'ingresso standard. Verificare il corretto funzionamento del programma con:

  • MAX = 1 (non viene visualizzato nessun numero, perché non esiste nessun numero primo minore di 1)
  • MAX = 2 (viene visualizzato soltanto il numero 1)
  • MAX = 3 (vengono visualizzati soltanto i numeri 1 e 2)
  • MAX = 4 e MAX = 5 (vengono visualizzati soltanto i numeri 1, 2 e 3)
  • MAX = 6 (vengono visualizzati soltanto i numeri 1, 2, 3 e 5)

Soluzione

Ecco una possibile soluzione. Osservate la costruzione dei due cicli annidati (for e while), che realizzano l'algoritmo descritto.

import java.util.Scanner;public class ErastoteneTester{ public static void main(String[] args){ Scanner in = new Scanner(System.in);int max = 0;while (max <= 0){ System.out.println("Inserisci valore max (intero positivo):");try{ max = Integer.parseInt(in.nextLine()); }catch (NumberFormatException e){ max = -1; }}boolean[] nonPrimes = new boolean[max]; //valori inizializzati a falsefor (int i = 2; i < max; i++){ int j = 2 * i;while (j < max){ nonPrimes[j] = true;j += i;}}System.out.println("Numeri primi minori di " + max + ":");for (int i = 1; i < max; i++)if (!nonPrimes[i]) System.out.println(i);}}

Anteprima
Vedrai una selezione di 1 pagina su 1
Informatica I - Esercizi uso di array Pag. 1
1 su 1
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher enricopava di informazioni apprese con la frequenza delle lezioni di Informatica 1 e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Padova o del prof Avanzini Federico.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community