若 a = bq + r,则a和b的最大公因子等于b和r的最大公因子绝对值(都为整数)
比如求4864和3458的最大公因子:
4864 = 1 * 3458 + 1406
3458 = 2 * 1406 + 646
1406 = 2 * 646 + 114
646 = 5 * 114 + 76
114 = 1 * 76 + 38
76 = 2 * 38 + 0
所以4864和3458的最大公因子为38
自己跟据这个,写了个用辗转相除求两个数最大公因子的方法。
int
getIn(
int
a,
int
b)
{
if (b == 0) return a;
return getIn(b, a % b);
}
{
if (b == 0) return a;
return getIn(b, a % b);
}
百度搜索了一下,果然还是别人的方法简单。
辗转相除递归算法:
//
求最大公约数,公式if(a=b*q+r)then(gcd(a,b)=gcd(b,r))
int gcd( int a, int b)
{
return (a%b)?gcd(b,a%b):b;
}
非递归算法:
int gcd( int a, int b)
{
return (a%b)?gcd(b,a%b):b;
}
//
非递归辗转相除
int gcd( int a, int b)
{
int r=0;
r=a%b;
while(r)
{
a=b;
b=r;
r=a%b;
}
return b;
}
int gcd( int a, int b)
{
int r=0;
r=a%b;
while(r)
{
a=b;
b=r;
r=a%b;
}
return b;
}