已知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); 
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章