快速冪取模

2021-09-07 03:58:29 字數 856 閱讀 9680

有一些c語言的題目中可能要求a的b次方然後對c去模,也就是我們說的對c取餘,大多數情況下我們想乙個遍歷就好啦呀,是的,對於大多數情況下我們使用遍歷可以解決其中大部分的問題,可是如果資料很大,那麼超過計算機儲存的範圍該怎麼去解決呢?

首先我們來說一下快速冪取模的思路:

快速冪具體分析:對a^b進行分析。

對於當a和b較小是直接用int或者long存是沒有問題的,但是當a和b大到一定程度時,這就不是暴力存就

可以解決的問題了。我們應該怎麼去解決這個問題呢?

在這裡我們需要把注意力放在「大」字上面,正是由於a和b過大才導致的問題。所以我們要想辦法不斷地減

小a和b的規模,所謂逐個擊破。

根據上面的那條引理,我們知道了可以把指數拆開,從這個突破口突破。這裡我們就不難想到這樣乙個演算法:

int a,b,c;

//a是底數,b是冪指數,c是模;

int sum=1;

a=a%c;

for(i=1;i<=b;i++)

sum=sum%c;

這樣我們的確對資料量進行了優化,可是還不夠,我們只對a進行了優化,那我們如何去改變b的資料量呢?

我們看乙個公式:

看到這兒你可能會明白怎麼處理b的值,就是不斷的分解b,我們來看**:

long long mode(long long a, long long b, long long mode)

return sum;

}

希望對大家的學習有所幫助。

快速冪 快速冪取模

快速冪的思想在於快速求解高冪指數的冪運算 複雜度為o log2n 與樸素運算相比有很大的改進 接下來給出 其中有詳解 include include using namespace std typedef long long ll ll pow1 int a,int b 最常規的方法 將冪指數轉化為...

快速冪 快速冪取模

求x m 一般方法是 xm x xm 1,這樣需要做m次乘法,未免過慢。加速方法有兩種。1.基於當m為偶數時,xm x2 m 2 當m為奇數時,xm x xm 1。顯然當m為偶數時m會減半,當m為奇數時,下次就是偶數。m可以很快收斂到0.表示冪 2.將m看成二進位制串mkmk 1 m1m0,那麼xm...

快速冪 快速冪取模

原文 快速冪這個東西比較好理解,但實現起來到不老好辦,記了幾次老是忘,今天把它系統的總結一下防止忘記。首先,快速冪的目的就是做到快速求冪,假設我們要求a b,按照樸素演算法就是把a連乘b次,這樣一來時間複雜度是o b 也即是o n 級別,快速冪能做到o logn 快了好多好多。它的原理如下 假設我們...