// Функция поиска наибольшего общего делителя (НОД)
// по алгоритму Евклида
long GCDEuclid(long x, long y, long g) 
{
	if (x < 0) x = -x;	 // НОД - положительное число
	if (y < 0) y = -y;	 // даже, если x < 0 или y < 0
	if (x + y == 0){ return;} // Ошибка: x = y = 0.
	
	g = y;                    // Если x = 0, то НОД = y
	while (x > 0) {
		g = x;
		x = y % x;
		y = g;
	}
return g;
}
Коментарий к циклу while.
В цикле переменной "x", первоначально равной одному из исходных чисел, 
каждый раз присваивается значение остатка от деления "y" на "x". 
Затем переменной "у" присваивается  предыдущее значение числа x. 
Цикл выполняется до тех пор, пока остаток от деления "y" на "x" не станет 
равен нулю. Последнее, не равное нулю, значение "x" и будет НОД, 
поскольку это - самое большое число, на которое делятся все предыдущие 
остатки от деления и, следовательно, исходные значения "y" и "x".