欧几里得算法

Posted by 东方VS清扬 on May 15, 2018

欧几里得算法又称辗转相除法,是用于计算两个正整数的最大公约数的经典算法

问题描述:有整数m,n,其中m > n >= 0,求解m和n的最大公约数?

基本思想:设函数 _gcd(m,n)_ 用于求解m和n的最大公约数,则 _gcd(m,n) = gcd(n,m mod n)_.

算法编写:
1
2
3
4
5
6
7
8
9
10
11
static int Gcd(int m, int n)
{
    if (m == n) return m;

    int max = m > n ? m : n;
    int min = m > n ? n : m;
    if (min == 0) return max;

    int r = m % n;
    return Gcd(n, r);
}
结果测试:
1
2
3
4
5
6
7
static void Main(string[] args)
{
    int m = 40, n = 56;

    // output is 8
    Console.WriteLine(Gcd(m, n));
}