int gcd(int x,int y )
2
{
3
if(x < y) return gcd(y,x); // x>y
4
if( y == 0) return x; // if y=0, x is GCD
5
else
6
{
7
if( !(x%2) )
8
{
9
if( !(y%2) ) //x,y both even
10
return 2*gcd(x >> 1, y >> 1);
11
else // x is even, y is odd
12
return gcd(x >> 1, y );
13
}
14
else
15
{
16
if( !(y%2) ) // x is odd, y is even
17
return gcd(x, y >> 1);
18
else // x, y both odd
19
return gcd(y,x-y);
20
}
21
}
22
}
2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22
