原創 分治 快速取冪與模取冪

2021-07-25 02:51:05 字數 715 閱讀 1783

時間限制: 1 sec  記憶體限制: 64 mb

提交: 468  解決: 172

輸入b,p,k的值,求b^p mod k的值。其中b,p,k為整型數。 b,p均不超過整型範圍,k^2不超過整型。

第1行:3個空格分開的整數b, p, k

第1行:1個數表示運算結果。

2 10 9
7
首先,這道題肯定不能直接pow求,也不能用迴圈,肯定超時,再不然就超限。

那麼,a^b怎麼求呢?

我們知道,

那麼,a的n次方是不是也可以拆分呢?

當然可以,方案如下:

所以我們就得到了乙個簡單的關係式,接下來就是寫程式驗證的時間了!

至於模取冪,取冪就可以了唄!

詳見**:

#includeusing namespace std;

long long a,c,k;

long long double_cut(long long a,long long c)

int main()

return ans;

}

快速冪與快速冪取模

快速冪顧名思義,就是快速算某個數的多少次冪。其時間複雜度為 o log?n 與樸素的o n 相比效率有了極大的提高。而快速冪取模就是對冪運算後結果進行取模運算。在程式設計過程中可能會遇到要求乙個很大的數的模,為了得到乙個能計算更大範圍,速度更快的演算法,快速冪取模演算法應運而生。一.計算冪,計算a ...

快速冪與快速冪取模

對大數時間複雜度的優化,具體操作是利用二進位制操作 11的二進位制是1011,11 2 1 2 0 2 1 2 1,因此,我們將a 轉化為算 a 20 a 21 a 23 看出來快的多了吧原來算11次,現在算三次 運算還可以判斷奇偶x 1 0為偶,x 1 1為奇 int ksm int a,int ...

快速冪與快速冪取模

正常的求冪就是一直累乘如下 include intmain 這種方法實現很簡單,但是有時候挺浪費時間,於是就有了快速冪。關於快速冪,用乙個簡單的例子說明比較容易理解。關於nm舉乙個實際,比如2 11。通常我們使用累乘法需要運算10次。211 2 2 2 2 2 2 2 2 2 2 2。而我們可以將1...