La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Esercizio n° 009 Modifica Crivello di Eratostene.

Presentazioni simili


Presentazione sul tema: "Esercizio n° 009 Modifica Crivello di Eratostene."— Transcript della presentazione:

1 Esercizio n° 009 Modifica Crivello di Eratostene

2 /** * Calcola il numero di primi minori di n */ import java.util.Bitset; int Crivello_Eratostene(int n) { BitSet primi = new BitSet(n); primi.set(2,n); int i=1; while (i*2

3 La prima soluzione che mi è venuta in mente è la seguente: Creo un vettore contenente un numero di booleani pari al numero di interi dellintervallo che devo prendere in considerazione. Setto il valore di tutti gli elementi su Vero Setto il valore di 0 e 1 su Falso perché non sono primi per default Partendo dallinizio scorro il vettore alla ricerca di elementi Vero e ogni volta che ne trovo uno rendo Falso tutti i suoi multipli, quindi partendo dal 2 … Corso di Programmazione in Java – Esercizio n° 009 Istituto Statale di Istruzione Superiore F. Enriques VVVVVVVVVVVVVV FFVVVVVVVVVVVV FFVVFVFVFVFVFV

4 Corso di Programmazione in Java – Esercizio n° 009 Istituto Statale di Istruzione Superiore F. Enriques Poi mi sposto sullelemento Vero successivo, cioè il 3, e ricomincio… ecc Come avrete potuto notare, il vettore non contiene il numero da analizzare, ma un valore booleano, per analizzare il numero si sfrutta lindice del vettore… visto che è una informazione che si può utilizzare gratuitamente… Quindi per fornire la cardinalità dei nostri numeri primi, occorrerà scorrere il vettore e contare quanti elementi sono impostati come Vero. Per fornire lelenco dei numeri primi trovati invece, occorrerà scorrere di nuovo il vettore ma a differenza del punto precedente questa volta non si effettua la somma, ma si stampa semplicemente lindice dellelemento il cui valore è impostato a Vero. Per risolvere il problema ho creato una classe Eratostene, con un costruttore che, dato un intero, si calcola il vettore con il metodo visto adesso, e due metodi stampa_cardinalita e stampa_contenuto. FFVVFVFVFFFVFV

5 Corso di Programmazione in Java – Esercizio n° 009 Istituto Statale di Istruzione Superiore F. Enriques class Eratostene { private int n; Vector primi= new Vector( ); public Eratostene(int numero_interi)//Costruttore { n=numero_interi; Boolean falso= new Boolean(false); //I vettori possono contenere soltanto Boolean vero= new Boolean(true); //oggetti e non tipi fondamentali… for(int i=0; i

6 Corso di Programmazione in Java – Esercizio n° 009 Istituto Statale di Istruzione Superiore F. Enriques …continuo della classe Eratostene della diapositiva precedente … public void stampa_cardinalita( )//Stampa la cardinalità del nostro insieme {// di numeri primi int j=0; for(int i=0; i

7 Corso di Programmazione in Java – Esercizio n° 009 Istituto Statale di Istruzione Superiore F. Enriques A questo punto non rimane altro da fare che scrivere il main che istanzi un oggetto dalla classe che abbiamo appena creato; Ciò ci permetterà di verificare se il risultato ottenuto è effettivamente corretto oppure no. public static void main(String[] args) { // TODO code application logic here Eratostene x = new Eratostene(100); x.stampa_cardinalita(); x.stampa_primi(); } Con cui ottengo il seguente risultato: I primi contenuti nell'intervallo tra 0 e 99 sono: 25 I primi nell'intervallo tra 0 e 99 sono:


Scaricare ppt "Esercizio n° 009 Modifica Crivello di Eratostene."

Presentazioni simili


Annunci Google