辗转相传求两个数的最大公约数
#include <math.h>
//欧几里得辗转相传求两个数的最大公约数
int function(int a, int b)
{
if (0 == a || 0 == b) return 0;
a = abs(a);
b = abs(b);
if (b > a)
{
int tmp = a;
a = b;
b = tmp;
}
//辗转相除——(b,a mod b)->(a, b)
while (b != 0)
{
int tmp = a % b;
a = b;
b = tmp;
}
return a;
}
以25,15为例:
次数 | a | b | -> | b | a%b |
---|---|---|---|---|---|
1 | 25 | 15 | -> | 15 | 10 |
2 | 15 | 10 | -> | 10 | 5 |
3 | 10 | 5 | -> | 5 | 0 |
4 | 5 | 0 |
第四次当b=0时,结束循环,a=5即为25和15的最大公约数。