最优解法:欧几里得算法(原版欧几里得书中,使用的不是除法,而是减法)
又称辗转相除法
//辗转相除法
public static int Gcd(int m, int n)
{
int r;
while (n != 0)
{
r = m % n;
m = n;
n = r;
}
return m;
}
//辗转相减法
public static int Gcd1(int m, int n)
{
while (m != n)
{
if (m > n)
m -= n;
else
n -= m;
}
return n;
}
解法3:连续整数检测算法
//穷举法
public static int Gcd(int m, int n)
{
int t = m < n ? m : n;
while (true)
{
if (m % t == 0)
{
if (n % t == 0)
{
return t;
}
}
t--;
}
}
解法4:
1.找到2个数的所有质数。
2.找到第一步的2个数的所有公质数
3.找到的质因数相乘,其结果是最大公约数