# 大雄的最大公因數
https://neoj.sprout.tw/problem/346/
就讀於野比高中裡的學生大雄,最喜歡找最大公因數(GCD)了!一天因緣際會,大雄學會了一種神秘演算法,可以快速找出GCD。
首先給定a, b兩個數字,要快速找出兩數GCD的方法為:
1. 若有其中一數為零,那答案就是另一個不為零的數字
2. 如果兩數都是偶數,那麼答案就是「2×(這兩個數字都除以二之後,再丟進這個演法裡計算出的值)」
3. 如果兩數都是奇數,假設兩數一大一小,答案是 (大數 − 小數) 和 小數 ,這兩個新數字再丟進演算法裡計算出的值
4. 如果兩數為一偶一奇,那麼答案就是把偶數除以二,另一數不變,再度丟進這個演算法裡算
如果真的聽不懂的話,可以參考這裡的說明
### 輸入說明
第一行有兩個數字 a, b ,請求出 a, b 的最大公因數
+ $1≤a≤10^9$
+ $1≤b≤10^9$
(在 int 可以存的範圍內)
### 輸出說明
輸出每一步驟做的內容並換行,最後一行輸出最大公因數
步驟說明:
+ 其中一數為零輸出 one zero
+ 兩數都是偶數輸出 both even
+ 兩數都是奇數輸出 both odd
+ 兩數一偶一奇輸出 one odd
### 範例輸入
```
4 2
```
### 範例輸出
```
both even
one odd
both odd
one zero
2
```
# Code
```cpp
#include <iostream>
using namespace std;
int Gcd(int a, int b)
{
if (a == 0 || b == 0)
{
cout << "one zero\n";
return a + b;
}
if (a % 2 == 0 && b % 2 == 0)
{
cout << "both even\n";
return 2 * Gcd(a / 2, b / 2);
}
if (a % 2 != 0 && b % 2 != 0)
{
if (a > b)
a -= b;
else
b -= a;
cout << "both odd\n";
return Gcd(a, b);
}
if (a % 2 == 0)
a /= 2;
if (b % 2 == 0)
b /= 2;
cout << "one odd\n";
return Gcd(a, b);
}
int main()
{
int a, b;
cin >> a >> b;
int c = Gcd(a, b);
cout << c << "\n";
}
```