Алгоритм Евклида c вычитанием
#include "stdafx.h"
#include <iostream>
using namespace std;
int NOD(int first, int second)
{
while (first!=second)
{
if (first>second) first-=second;
else second-=first;
}
return first;
}
void main ()
{
setlocale(LC_ALL,"Rus");
int first, second;
cout<<"Введите первое значение"<<endl;
cin>>first;
cout<<"Введите второе значение"<<endl;
cin>>second;
cout<<"НОД("<<first<<", "<<second<<")="<<NOD(first, second)<<endl;
system("pause");
}

Алгоритм Евклида c делением
#include "stdafx.h"
#include <iostream>
using namespace std;
int NOD(int first, int second)
{
while (first!=0 && second!=0)
{
if (first>second) first%=second;
else second%=first;
}
return first+second;
}
void main ()
{
setlocale(LC_ALL,"Rus");
int first, second;
cout<<"Введите первое значение"<<endl;
cin>>first;
cout<<"Введите второе значение"<<endl;
cin>>second;
cout<<"НОД("<<first<<", "<<second<<")="<<NOD(first, second)<<endl;
system("pause");
}

Алгоритм Евклида c вычитанием и рекурсией
#include "stdafx.h"
#include <iostream>
using namespace std;
int NOD(int first, int second)
{
if(first==second)return first;
if (first<second) return NOD(first, second-first);
else return NOD(first-second, second);
}
void main ()
{
setlocale(LC_ALL,"Rus");
int first, second;
cout<<"Введите первое значение"<<endl;
cin>>first;
cout<<"Введите второе значение"<<endl;
cin>>second;
cout<<"НОД("<<first<<", "<<second<<")="<<NOD(first, second)<<endl;
system("pause");
}

Алгоритм Евклида c делением и рекурсией
#include "stdafx.h"
#include <iostream>
using namespace std;
int NOD(int first, int second)
{
if (first*second==0) return first+second;
if (first<second)return NOD(first, second%first);
else return NOD(first%second, second);
}
void main()
{
setlocale(LC_ALL,"Rus");
int first, second;
cout<<"Введите первое значение"<<endl;
cin>>first;
cout<<"Введите второе значение"<<endl;
cin>>second;
cout<<"НОД("<<first<<", "<<second<<")="<<NOD(first, second)<<endl;
system("pause");
}

Бинарный алгоритм вычисления наибольшего общего делителя
#include "stdafx.h"
#include <iostream>
using namespace std;
int NOD(int first, int second)
{
int k=1;
while ((first!=0) && (second!=0))
{
while ((first%2==0) && (second%2==0))
{
first/=2;
second/=2;
k*=2;
}
while (first%2==0) first/=2;
while (second%2==0) second/=2;
if (first>=second) first-=second; else second-=first;
}
return second*k;
}
void main()
{
setlocale(LC_ALL,"Rus");
int first, second;
cout<<"Введите первое значение"<<endl;
cin>>first;
cout<<"Введите второе значение"<<endl;
cin>>second;
cout<<"НОД("<<first<<", "<<second<<")="<<NOD(first, second)<<endl;
system("pause");
}

