若 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;
}