已知a、b的值,且已知其可以表示为如下形式:
a=qk0,b=qk1(q、k0、k1均为正整数)
求p,使得:
p=qg,g=gcd(k0,k1)
p称为a、b间最大共比例。
当需要求很多个数的最大公比例时,直接求底数和指数很麻烦。于是我们可以运用辗转相减法来解决:
设Q(a,b)为a,b间最大公比例,则
Q(a,b)=Q(qk0,qk1)=qgcd(k0,k1)=qgcd(k1,k1−k0)=Q(qk1,qk1−k0)=Q(b,b/a)
反复进行操作,直到a==b,就可以得到最大公比例。
用于此题的辗转相减法代码:
long gcd_sub(long a,long b)
{
if(a==b) return a;
if(a>b) return gcd_sub(b,a/b);
else return gcd_sub(b,a);
}