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 { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.it/1009110/3/slides/slide_1.jpg", "name": "/** * 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. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 Setto il valore di 0 e 1 su Falso perché non sono primi per default. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 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 … 0 1 2 3 4 5 6 7 8 9 10 11 12 13 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.. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 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 { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.it/1009110/3/slides/slide_4.jpg", "name": "Corso di Programmazione in Java – Esercizio n° 009 Istituto Statale di Istruzione Superiore F.", "description": "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 { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.it/1009110/3/slides/slide_5.jpg", "name": "Corso di Programmazione in Java – Esercizio n° 009 Istituto Statale di Istruzione Superiore F.", "description": "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: 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


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

Presentazioni simili


Annunci Google