Как реализовать НОД трех чисел с помощью метода Стейна? Очень слаб в арифметике. Нашел пример для двух чисел, не могу разобраться

        if (a == b)
        {
            return a;
        }
            
        if (a == 0)
        {
            return b;
        }
            
        if (b == 0)
        {
            return a;
        }

        if ((~a & 1) != 0)
        {
            if ((b & 1) != 0)
            {
                return GetGcdByStein(a >> 1, b);
            }
            else
            {
                return GetGcdByStein(a >> 1, b >> 1) << 1;
            }                    
        }

        if ((~b & 1) != 0)
        {
            return GetGcdByStein(a, b >> 1);
        }

        if (a > b)
        {
            return GetGcdByStein((a - b) >> 1, b);
        }
        
        return GetGcdByStein((b - a) >> 1, a);

Ответы (0 шт):