Skip to content

Instantly share code, notes, and snippets.

@cthbst
Last active December 26, 2019 02:40
Show Gist options
  • Save cthbst/51c118a43996393b41e9b2c026dbbee4 to your computer and use it in GitHub Desktop.
Save cthbst/51c118a43996393b41e9b2c026dbbee4 to your computer and use it in GitHub Desktop.
#include <bits/stdc++.h>
using namespace std;
int B(int x) {
x = ((x >> 16) | x) & 0xFFFF;
x = ((x >> 8) | x) & 0xFF;
x = ((x >> 4) | x) & 0xF;
x = ((x >> 2) | x) & 0x3;
x = ((x >> 1) | x) & 0x1;
return x;
}
void Iter(int &a, int &b) {
int c = 1 - B(b);
int tmp = a % (b + c) + a * c;
a = b;
b = tmp;
}
int gcd(int a, int b) {
Iter(a, b), Iter(a, b), Iter(a, b), Iter(a, b), Iter(a, b);
Iter(a, b), Iter(a, b), Iter(a, b), Iter(a, b), Iter(a, b);
Iter(a, b), Iter(a, b), Iter(a, b), Iter(a, b), Iter(a, b);
Iter(a, b), Iter(a, b), Iter(a, b), Iter(a, b), Iter(a, b);
Iter(a, b), Iter(a, b), Iter(a, b), Iter(a, b), Iter(a, b);
Iter(a, b), Iter(a, b), Iter(a, b), Iter(a, b), Iter(a, b);
Iter(a, b), Iter(a, b), Iter(a, b), Iter(a, b), Iter(a, b);
Iter(a, b), Iter(a, b), Iter(a, b), Iter(a, b), Iter(a, b);
Iter(a, b), Iter(a, b), Iter(a, b), Iter(a, b), Iter(a, b);
Iter(a, b), Iter(a, b), Iter(a, b), Iter(a, b), Iter(a, b);
return a + b;
}
int main() {
assert(gcd(5, 10) == 5);
assert(gcd(60, 36) == 12);
assert(gcd(0, 12) == 12);
assert(gcd(12, 0) == 12);
assert(gcd(0, 0) == 0);
assert(gcd(2147483647, 2147483647) == 2147483647);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment