一:更相减损术
举例:求gcd(最大公约数)18 4
18 - 4 = 14
14 - 4 = 10
10 - 4 = 6
6 - 4 = 2
4 - 2 = 2 ——> 相等 gcd = 2;
二:辗转相除法
18 % 4 = 2
4 % 2 = 2
2 % 2 = 0 ——> gcd = 2
gcd (a, b) = gcd(a - b, b) = gcd(a - 2b , b) = gcd(a - k*b, b) = gcd(a % b, b)
代码:
#include<bits/stdc++.h>
using namespace std;
int my_gcd(int a, int b)
{
// if(b == 0)
// return a;
// else
// return my_gcd(b, a%b);
return b == 0 ? a :my_gcd(b, a % b);
}
int main()
{
int a, b;
cin >> a >> b;
cout << my_gcd(a,b);
return 0;
}