已知a、b,求其最大公比例(辗转相减法的扩展应用)

已知aba、b的值,且已知其可以表示为如下形式:
a=qk0,b=qk1(qk0k1)a=q^{k_0},b=q^{k_1} (q、k_0、k_1均为正整数)
pp,使得:
p=qg,g=gcd(k0,k1)p=q^{g},g=gcd(k_0,k_1)
pp称为aba、b间最大共比例。

当需要求很多个数的最大公比例时,直接求底数和指数很麻烦。于是我们可以运用辗转相减法来解决:

Q(a,b)Q(a,b)a,ba,b间最大公比例,则
Q(a,b)=Q(qk0,qk1)=qgcd(k0,k1)=qgcd(k1,k1k0)=Q(qk1,qk1k0)=Q(b,b/a)Q(a,b)=Q(q^{k_0},q^{k_1})=q^{gcd(k0,k1)}=q^{gcd(k1,k_1-k_0)}=Q(q^{k_1},q^{k_1-k_0})=Q(b,b/a)
反复进行操作,直到a==b,就可以得到最大公比例。

用于此题的辗转相减法代码:

long gcd_sub(long a,long b)//辗转相减的另一种使用
{
    if(a==b) return a; //这里一定会 出现这种情况的 因为我们的b和a是倍数关系
    if(a>b) return gcd_sub(b,a/b);//我们保证a>b
    else return gcd_sub(b,a); 
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章