求 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 ...