La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Calcolo del minimo comune multiplo (m.c.m.) Luigi Sante 183948.

Presentazioni simili


Presentazione sul tema: "Calcolo del minimo comune multiplo (m.c.m.) Luigi Sante 183948."— Transcript della presentazione:

1 Calcolo del minimo comune multiplo (m.c.m.) Luigi Sante

2 minimo comune multiplo Scrivere un programma che calcoli il minimo comune multiplo di due numeri, con l'ausilio di una funzione che generi un vettore dei primi N numeri primi.

3 Passaggi fondamentali Calcolare i numeri primi e inserirli in un vettore Confrontare i due numeri dati con i numeri primi e calcolarne il minimo comune multiplo

4 Vettore dei numeri primi Un numero è primo se è divisibile solo per se stesso e per uno. I numeri primi di conseguenza possono essere ricavati escludendo i multipli. Per esempio: sapendo che 2 è primo, tutti i numeri multipli ovvero pari non sono primi. 3 non è multiplo di 2 quindi è primo, mentre il seguente 4 non lo è... In pratica, un numero è primo se non è divisibile per i numeri primi che lo precedono.

5 Vettore dei numeri primi (2) Bisogna confrontare il numero per tutti i numeri primi calcolati in precedenza e verificare che non sia divisibile (ovvero multiplo) i_riemp 13 numero Numero_primo i

6 Vettore dei numeri primi (3) i = 0; primo=VERO; while(i < i_riemp && primo) { if((numero % numero_primo[i]) == 0) primo=FALSO; else i++; } Alla fine del ciclo, il flag primo dice se si è trovato un numero primo.

7 Vettore dei numeri primi (4) Se il numero è primo, lo si inserisce nel vettore nella prima posizione vuota (puntata da i_riemp) e si incrementa l'indice i_riemp (che indica anche il numero di numeri primi già trovati). Si incrementa il numero per una nuova ricerca. if(primo) { numero_primo[i_riemp]=numero; i_riemp++; } numero++;

8 Vettore dei numeri primi (5) Lintero blocco deve essere eseguito finché non si è raggiunto il numero di primi richiesto (test su i_riemp). Per le inizializzazioni, si sa già che 2 è il primo numero primo: lo si inserisce nel vettore e si comincia con numero = 3 (lalgoritmo sarebe comunque corretto anche partendo con il vettore vuoto (i_riemp = 0) e con numero = 2)

9 Vettore dei numeri primi (6) numero_primo[0]=2; i_riemp=1; numero=3; while(i_riemp < num_primi) { primo=VERO; i=0; while(i < i_riemp && primo) { if(numero%numero_primo[i] == 0) primo = FALSO; else i++; } if(primo) { numero_primo[i_riemp]=numero; i_riemp++; } numero++; }

10 Funzione calcola_primi Ora che abbiamo trovato come riempire il vettore dei numeri primi, passiamo a scrivere lintestazione (e il prototipo) della funzione. void calcola_primi(int numero_primo[], int num_primi);

11 m.c.m. Il mcm è il prodotto di tutti i fattori primi comuni e non comuni, presi una sola volta con il massimo esponente.

12 m.c.m. (2) Il mcm è quindi risultato di un prodotto sequenziale tra numeri primi mcm=1; mcm = mcm * vettore_primi[indice_vettore];

13 m.c.m. (3) Per prendere il massimo esponente del numero primo considerato bisogna ripetere finché è fattore di almeno uno dei due numeri mcm=1; while(a%vettore_primi[indice_vettore]==0 || b%vettore_primi[indice_vettore]==0) { mcm = mcm * vettore_primi[indice_vettore]; }

14 m.c.m. (4) Ad ogni passaggio si divide il numero che ha soddisfatto la condizione per il numero primo preso in considerazione mcm=1; while(a%vettore_primi[indice_vettore]==0 || b%vettore_primi[indice_vettore]==0) { mcm = mcm * vettore_primi[indice_vettore]; if(a%vettore_primi[indice_vettore]==0) a=a/vettore_primi[indice_vettore]; if(b%vettore_primi[indice_vettore]==0) b=b/vettore_primi[indice_vettore]; }

15 m.c.m. (5) Quando la condizione non si verifica più, si esce dal ciclo e si passa al numero primo successivo, incrementando l'indice del vettore primo di 1. Quindi bisogna anche inizializzare prima l'indice a 0 indice_vettore=0; mcm=1; while(a%vettore_primi[indice_vettore]==0 || b%vettore_primi[indice_vettore]==0) { mcm = mcm * vettore_primi[indice_vettore]; if(a%vettore_primi[indice_vettore]==0) a=a/vettore_primi[indice_vettore]; if(b%vettore_primi[indice_vettore]==0) b=b/vettore_primi[indice_vettore]; } indice_vettore++;

16 m.c.m. (6) Tutto va ripetuto finché entrambi i numeri sono divisibili per i numeri primi e quindi diversi da 1 mcm=1; indice_vettore=0; while(a!=1 || b!=1) { while(a%vettore_primi[indice_vettore]==0 || b%vettore_primi[indice_vettore]==0) { mcm = mcm * vettore_primi[indice_vettore]; if(a%vettore_primi[indice_vettore]==0) a=a/vettore_primi[indice_vettore]; if(b%vettore_primi[indice_vettore]==0) b=b/vettore_primi[indice_vettore]; } indice_vettore++; }

17

18


Scaricare ppt "Calcolo del minimo comune multiplo (m.c.m.) Luigi Sante 183948."

Presentazioni simili


Annunci Google