public static long GCD(long a, long b)
{
while (a != 0 && b != 0)
{
while ((b & 1) == 0)
{
b >>= 1;
}
while ((a & 1) == 0)
{
a >>= 1;
}
if (a > b)
{
a -= b;
}
else {
b -= a;
}
}
return b == 0 ? a : b;
}