快速冪問題

2021-10-03 17:07:35 字數 585 閱讀 5618

求a^b mod p

首先讓計算機求出a^b,如果直接暴力的話,計算機要計算b次,但是b的資料範圍太大,直接計算可能會超時,所以要採用快速冪,將複雜度降為o(log(b))

這樣表示之後,我們就可以在快速冪的過程中讓a不斷的自乘

看下**

ll power

(int a,

int b,

int p)

return ans;

}

我再給大家模擬一下迴圈過程

第一次迴圈,首先判斷二進位制數b的最後一位是不是1,如果是1,表示a^11 = a^8 * a^2 * a^1 的a^1存在,所以ans *= base,然後base自乘上公升變成a^2,b右移一位,把剛剛用過的一位推掉

第二次迴圈,現在b的最後一位是1,表示a^2存在,所以ans *= base,現在的base = a2,然後base再次自乘,變成a4,b繼續右移

第三次迴圈,這次b的最後一位是0,表示a4不存在,base繼續自乘變成a8,b右移

第四次迴圈,現在b的最後一位是1,ans *= base,b再右移一位變成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 次方對 p 取模的值。輸入格式 三個整數 a,b,p 在同一行用空格隔開。輸出格式 輸出乙個整數,表示a b mod p的值。資料範圍 0 a,b,p 109 資料保證 p 0 輸入樣例 3 2 7輸出樣例 2快速冪思想 如果我們想求37是多少,用最暴力的做法只需要迴圈進行7次相乘,...