高次冪求模

2021-09-20 14:43:22 字數 809 閱讀 2060

主要的思想是來自乙個公式:a*b%c = (a%c) *(b%c) %c

基本概念及思想

對形如a^b mod m 的運算(b一般較大)

但a,b,m都在long型範圍內

演算法的主要思想是分治,分而治之。將大的問題分成若干個相似的較小的問題!

具體實現是用遞迴的方法! 舉例

2^100mod 3

像這種運算如果先算出2^100 的值,然後再模上3,相信比較困難!

我們可以將100變小點

2^100=(2^50)^2 =((2^25)^2)^2=((((2^1)^2)^2)…)^2

若我們已經得出250 mod 3的值,我們便很簡單地得出2^100mod 3的值。

按照上述的方法繼續分下去…

最終肯定會得到2^1mod 3 這種情況!這樣就好辦了!這便是遞迴的邊界,到此我們就可以返回2 mod 3的值了!

另乙個問題,再分時有兩種情況!

2^100=(2^50)2        , 100是偶數

2^99=(2^49)2 *2   , 99是奇數

第二種情況需要在第一種情況上乘上一次基數。

遞迴演算法**如下

1

long mod(long a,long b,longc)2

另一種高效的演算法是用迴圈代替遞迴演算法

1

long mod_loop(long a,long b,longc)2

10return

ret;

11 }

快速冪求模

所謂的快速冪,實際上是快速冪取模的縮寫,簡單的說,就是快速的求乙個冪式的模 餘 在程式設計過程中,經常要去求一些大數對於某個數的餘數,為了得到更快 計算範圍更大的演算法,產生了快速冪取模演算法。一.先從簡單的例子入手 先求值,在取模。演算法1.首先直接地來設計這個演算法 int ans 1 for ...

快速冪求模

演算法1.首先直接地來設計這個演算法 很容易因為數字過大而溢位。int ans 1 for int i 1 i b i ans ans a ans ans c 演算法2.根據公式a b mod c a mod c b mod c 改進為 int ans 1 a a c for int i 1 i b...

快速冪求模

快速冪 簡要介紹 能 快速算底數的n次冪。其時間複雜度為 o log n 與樸素的o n 相比效率有了極大的提高。其原理 假設求a的b次方 先 把b轉換成 二進位制數 該二進位制數第i位的權為 2 i 1 例如 11的二進位制是1011 因此,我們將a 轉化為算 其應用 1.一般演算法 int an...