演算法競賽模板 快速乘與快速冪

2022-09-06 11:03:27 字數 1435 閱讀 5571

取英文首字母來命名函式名稱:

(1)multiply乘;

(2)power-冪;

(3)quick-快速;

(4)mod-取模

①快速乘

由於計算機底層設計的原因,做加法往往比乘法快的多,因此將乘法轉換為加法計算將會大大提高乘法運算的速度,除此之外,當我們計算 a*b%mod 的時候,往往較大的數計算 a*b 會超出long long int的範圍,這個時候使用快速乘法方法也能解決上述問題。

快速乘法的原理就是利用乘法分配率來將a*b轉化為多個式子相加的形式求解(注意這時使用乘法分配率的時候後面的乙個乘數轉化為二進位制的形式計算)

eg:20*14 = 20*(1110)2 = 20*(2^3)*1 + 20*(2^2)*1+20*(2^1)*1+20*(2^0)*0 = 160+80+40 = 280

typedef long

long

ll;ll qm(ll a,ll b)

return

ans;

}

②快速乘取模

typedef long

long

ll;ll qmm(ll a,ll b,ll mod)

return ans;

}

③快速冪

typedef long

long

ll;ll qp(ll x,ll p)

return

ans;

}

④快速冪取模(二階),即求(x^p)%mod

typedef long

long

ll;ll qpm(ll x,ll p,ll mod)

return ans;

}

⑤快速冪取模(三階),即求(a^(b^c))%mod

三階和二階的函式一樣,只是輸出方程有變:qpm(a,qpm(b,c,mod-1),mod);

⑥快速冪取模+快速乘取模(最優)

typedef long

long

ll;ll qmm(ll a,ll b,ll mod)

return

ans;

}ll qpm(ll x,ll p,ll mod)

return

ans;

}

快速冪與快速乘模板

快速冪與快速乘,都運用到了乙個定理 每乙個正整數都能唯一表示為2的次冪的和。即 不同的數的二進位制表達形式唯一。因此a b 可以轉化為幾個a2i相乘。又由於a2i a2 i 1 2,所以可以遞推求出每個a2 i。int pow int a,int b,int p return ans 快速乘也是一樣...

快速冪 快速乘模板

給定正整數a b p,求a的b次方modp的值 輸入描述 第一行乙個正整數t表示測試資料組數。接下來t行,每行三個正整數a b p,含義如上文。輸出描述 輸出t行,每行乙個非負整數表示答案。輸入2 2 5 10 57284938291657 827493857294857 3847295837482...

快速冪 與 快速乘

快速冪 傳統求a b非常的耗時間,那麼有沒有一種更快的方法去求這個呢 下面介紹一次快速冪 以求a的b次方來介紹 把b轉換成二進位制數 以a 11為例 b的二進位制數為1011,二進位制從右向左算,但乘出來的順序是 a 20 a 21 a 23 是從左向右的。我們不斷的讓base base目的是累乘,...