Prendi il frammento di codice che trova mcm ed analizziamolo insieme:
//calcolo mcm
max=num1*num2*num3;
ps+=1;
for(c=1;c<=max;c++){
ps+=1;
if( c%num1==0 && c%num2==0 && c%num3==0){
cout<<"mcm= "<<c<<endl;
cout<<"iterazioni= "<<ps<<endl;
break;
}
}
la prima istruzione: max=num1*num2*num3; ci da il massimo delle iterazioni, max sarà sicuramente divisibile dai tre numeri dati.
Il minimo comune multiplo è un numero che è divisibile senza resto da tutti i numeri dati.
nel for impostiamo un ciclo che va da 1 a max incrementando la variabile c (il numero che deve essere verificato se è divisibile senza resto dagli altri numeri)
facciamo l'esempio che num1=10, num2=20, num3=30
All'inizio c=1, se fai come hai fatto tu num1%c, sarebbe 10/1, che da resto zero, cioè è divisibile, mentre 1 non è il mcm.
Continuiamo l'esempio ma con l'istruzione corretta:
c%num1 1/10 = 0.1
c%num2 1/20 = 0.05
c%num3 1/30 = 0.033
le condizioni sono false, tutte le divisioni sono con resto, 1 non è il mcm
il for continua e incrementa c di una unità:
c%num1 2/10 = 0.2
c%num2 2/20 = 0.1
c%num3 2/30 = 0.066
le condizioni sono false, 2 non è il mcm
Quando le condizioni saranno tutte vere?, quando c diventa 60,
c%num1 60/10 = 6.0
c%num2 60/20 = 3.0
c%num3 60/30 = 2.0
tutte le divisoni danno resto zero 60 è il mcm
Il programma non esegue nessuna ottimizzazione, controlla ostinatamente tutti i valori di c finquando non trova il mcm, utilizzando la forza bruta, invece dell'intelligenza.