主要的思想是來自乙個公式: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
1long 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...