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;
    }

}