uni 27/09/2023
Cosa è
Procedimento algebrico che permette di calcolare il Massimo Comune Divisore tra due numeri e interi attraverso un numero finito di passi basati sul calcolo di alcune divisioni.
Come funziona
Poniamo:
Quindi
Siccome (Dimostrazione McD) ci conviene calcolare , poiché e sono entrambi minori di e quindi i calcoli sono più facili.
Svolgo , se mi fermo poiché , altrimenti continuo con:
, se mi fermo poiché , altrimenti continuo con:
, se mi fermo…
e via via finché non trovo un resto uguale a zero, l’McD è uguale all’ultimo denominatore usato.
Dimostrazione McD
Dimostrazione che
Creo due Insiemi:
insieme dei divisori di a e b
insieme dei divisori di b e r
Per dimostrare che gli McD dei due insiemi sono uguali devo dimostrare che gli insiemi stessi sono uguali, quindi devo dimostrare che:
1
2
:
1
Se allora e
Se allora e
Sostituisco nell’equazione generica che mette in relazione con :
Segue che .
Di conseguenza i valori di dividono anche e , di conseguenza appartengono anche a .
2
Se allora e
Se allora e
Sostituisco nell’equazione generica che mette in relazione con :
Segue che .
Di conseguenza i valori di dividono anche e , di conseguenza appartengono anche a .
Segue che A è contenuto di B e B è contenuto di A quindi , allora:
C.V.D.
Programma
Questo programma commentato svolge questo procedimento, in C++:
#include <iostream>
using namespace std;
int main() {
int n1;
int n2;
int q;
int r;
int mcd;
start: // this is a label
number1: //questa è una label, con goto il programma ritorna a quest ariga
cout << "Insert first number" <<endl;
cin >> n1;
if (n1<=0) {
cout<<"number must be positive"<< endl; //non accetta numeri negativi
goto number1;} //questo va alla riga number1
number2:
cout<< "insert second number (must be smaller than first)" << endl;
cin >> n2;
if (n2<=0) {
cout<<"number must be positive"<< endl; //numeri positiviiiii
goto number2;}
else if (n2>n1) {
cout<< "Second number must be smaller than first! "<< endl;
goto start;
}
mcd:
q = n1/n2; // q è la divisione
r = n1%n2; // r è il resto
if (r==0) {
mcd = n2;
cout << "the McD is " << mcd << " !" << endl;
return 0;
}
else {
n1 = n2;
n2 = r;
goto mcd;
}
}