Advertisement
Guest User

Untitled

a guest
Jul 28th, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.37 KB | None | 0 0
  1. i64 gcd(i64 u, i64 v)
  2. {
  3.     register int shift;
  4.     i64 diff;
  5.     if (u == 0 || v == 0)
  6.         return u | v;
  7.     for (shift = 0; ((u | v) & 1) == 0; ++shift)
  8.         u >>= 1, v >>= 1;
  9.     while ((u & 1) == 0)
  10.         u >>= 1;
  11.     do
  12.     {
  13.         while ((v & 1) == 0)
  14.             v >>= 1;
  15.         if (u < v)
  16.             v -= u;
  17.         else
  18.             diff = u - v, u = v, v = diff;
  19.         v >>= 1;
  20.     }
  21.     while (v != 0);
  22.     return u << shift;
  23. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement