快速冪取模演算法

2021-08-20 11:08:26 字數 854 閱讀 5984

ab % c, 其中a,b的值可能很大,導致ab的值long long都存不下

對於ab % c

1. 首先我們將b分解成如下表示

b = b0 + b1 * 21 + ··· + bn * 2n

(其中的 b0, b1, ···, bn 指的是對應b的二進位制表示法中對應位置的取值,1或者0) => 比如:6 —> 110 => b0 = 0, b1 = 1, b2 = 1

ab可以表示成下面的形式

ab = ab0

* ab1 * 21

* ··· * abn * 2n

=> 令ai = abi * 2i

=> 則:ab = a0 * a1 * ··· * an

運用上面提到的關於冪運算的性質 ->(a · b) mod c = [ (a mod c) · (b mod c) ] mod c

ab % c = ( (a0 % c) * (a1 % c) * ··· * (an % c ) ) % c

int quickmod(int a, int b, int c)

return ans;

}

快速冪 快速冪取模演算法

在平時我們需要求乙個a b時,一般會用c 自帶的pow 函式對吧,可是加入資料十分大時,pow 是十分慢的,這個時候我們需要乙個能高效求出a b的演算法,這這時就出現了快速冪演算法。假如我們需要求3 999,那麼我們是不是可以發現3 999 3 512 256 128 64 32 4 2 1 3 5...

快速冪取模演算法

因為進製對個位不影響,積的取餘等於取餘的積取餘 includeint powermod int a,int b,int c return ans int main return 0 1.如果b是偶數,我們可以記k a2 mod c,那麼求 k b 2 mod c 就可以了。2.如果b是奇數,我們也可...

快速冪取模演算法

演算法1 int ans 1 for int i 1 i b i ans ans c 可以對a關於c取餘,這樣可以大大減少a的大小 演算法2int ans 1 a a c 加上這一句 for int i 1 i b i ans ans c 既然某個因子取餘之後相乘再取餘保持餘數不變,ans也可以進行...