27 lines
536 B
Text
27 lines
536 B
Text
|
|
int binary_gcd (int x, int y) {
|
||
|
|
if (x == y) { return x; }
|
||
|
|
if (x == 0) { return y; }
|
||
|
|
if (y == 0) { return x; }
|
||
|
|
if ((~x [&] 1) == 1) {
|
||
|
|
if ((y [&] 1) == 1) {
|
||
|
|
return binary_gcd(x >> 1, y);
|
||
|
|
}
|
||
|
|
else {
|
||
|
|
return binary_gcd(x >> 1, y >> 1) << 1;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if ((~y [&] 1) == 1) {
|
||
|
|
return binary_gcd(x, y >> 1);
|
||
|
|
}
|
||
|
|
if (x > y) {
|
||
|
|
return binary_gcd((x - y) >> 1, y);
|
||
|
|
}
|
||
|
|
return binary_gcd((y - x) >> 1, x);
|
||
|
|
}
|
||
|
|
|
||
|
|
int program (int argc, string[] argv) {
|
||
|
|
var x = 21;
|
||
|
|
var y = 15;
|
||
|
|
return binary_gcd(x, y);
|
||
|
|
}
|