快速冪問題

2022-07-25 07:24:08 字數 636 閱讀 7195

求 a 的 b 次方對 p 取模的值。

輸入格式

三個整數 a,b,p ,在同一行用空格隔開。

輸出格式

輸出乙個整數,表示a^b mod p的值。

資料範圍

0≤a,b,p≤109

資料保證 p≠0

輸入樣例:

3 2 7
輸出樣例:

2
快速冪思想

如果我們想求37是多少,用最暴力的做法只需要迴圈進行7次相乘,但是如果我們想求的是31000000,即3的100萬次冪呢?

先從3^7開始看

7的二進位制表示為111,我們可以發現31=3,32=9,3^4=81,

而3^1 * 3^2 * 3^4 = 3^7

那麼100萬不會超過2^20

3^1 = 3, 3^2=9, ... , 3^19

找出二進位制為1的存在,將這些進行相乘,就可以得到最後的結果

**如下

#includeusing namespace std;

int main()

cout << res << endl;

return 0;

}

快速冪問題

所謂的快速冪,實際上是快速冪取模的縮寫 首先,最基本的辦法是 int ans 1 for int i 1 i b i ans ans c ans是對answer的縮寫但是如果a很大,那麼a b的結果就容易非常大,所以在求之前可以先對a做乙個變化 如下 int ans 1 a a c 加上這一句 fo...

快速冪問題

求冪方法 pow函式 也就是平常使用pow函式,最簡單的實現就是一直累乘,可以得到這樣的 123 4567 int pow int a,int n return ans 快速冪取模 根據同餘定理,我們知道 ab m a m b m m 其實快速冪取模也是用到這個定理,那麼根據上面的定理可以推導出另乙...

快速冪問題

求a b mod p 首先讓計算機求出a b,如果直接暴力的話,計算機要計算b次,但是b的資料範圍太大,直接計算可能會超時,所以要採用快速冪,將複雜度降為o log b 這樣表示之後,我們就可以在快速冪的過程中讓a不斷的自乘 看下 ll power int a,int b,int p return ...