sicily 6418. 最大公约数
Description
如果有一个自然数a能 被自然数b整除,则称a为b的倍数,b为a的约数。几个自然数公有的约数,叫做这几个自然数的公约数。公约数中最大的一个公约数,称为这几个自然数的最大 公约数(greatest common divisor, gcd)。例: 在2、4、6中,2就是2,4,6的最大公约数。
实现函数:
int gcd(int m,int n);
返回m,n的最大公约数,m,n>=1.
有四种方法可以AC,即迭代/递归与更相减损/辗转相除的组合。
/* 递归+更相减损 */ int gcd (int m, int n) { if( m == n ) { return m; } else if ( m > n ) { return gcd( m - n, n ); } else { return gcd( n - m, m ); } }
/* 迭代+更相减损 */ int gcd ( int m, int n ) { while ( m != n ) { if ( m > n ) { m = m - n; } else { n = n - m; } } return m; }
/* 递归+辗转相除 */ int gcd (int m, int n) { if ( n == 0 ) { return m; } else if ( m == 0 ) { return n; } else if ( m >= n ) { return gcd ( m % n, n ); } else { return gcd ( n % m, m ); } }
/* 迭代+辗转相除 */ int gcd (int m, int n) { int r; while ( n != 0 ) { r = n; n = m % n; m = r; } return m; }