隨機演算法 之模冪函式

2021-04-21 04:03:48 字數 749 閱讀 3085

在隨機素數測試演算法中要用到模冪運算,在o(lgn)的時間內產生模冪結果是非常有用的。

在諸如rsa等演算法中都要用到求a^n mod p的運算,例如費馬小定理(a^(n-1) mod n = 1,p是a的非素數因子)

及rsa演算法用到的費馬定理的推廣(a^(y(n))mod n = 1,y(n)為n的尤拉函式)等等都需要用到模冪運算,那麼

怎麼能快速的到模冪運算結果其實原理很簡單,這是我用english寫的,希望沒寫錯,呵呵

basing on the two ****** theories:

1,(x*y)%z=((x%z)*(y%z))%z

2,(x^y)%z=((x%z)^y)%z

to solve the y=(g^x)%p problem left shifting x until x become 0,compute g^x by computing

k=(g^(x/2)%p) and g^x=k*k or g^x=k*k*g 。so this algorithm is o(lgn) which is also linear。

this is a ****** and recursive algorithm.

這是我寫的參考程式 (僅供參考)

class mmath

}static bool prime_judge(int n)

}另外附乙個根據費馬定理寫的素數測試程式(會產生錯誤,偽素數如1387等)

millerrabin測試還沒有想好怎麼寫程式呢。 

leetcode解題之冪函式

實現 pow x,n 即計算 x 的 n 次冪函式。題目 我對題目的第一印象就是題目很簡單,只要區別,和三種情況就好了,然後用暴力法相乘就可以了,但我再一想,leetcode絕對不會出這種弱智題,沒有太大的意義,但還是懷著半信半疑的心情用暴力法寫了一遍,結過果然不出所料超時了 然後我試著想另外的辦法...

leetcode解題之冪函式

實現 pow x,n 即計算 x 的 n 次冪函式。題目 我對題目的第一印象就是題目很簡單,只要區別,和三種情況就好了,然後用暴力法相乘就可以了,但我再一想,leetcode絕對不會出這種弱智題,沒有太大的意義,但還是懷著半信半疑的心情用暴力法寫了一遍,結過果然不出所料超時了 然後我試著想另外的辦法...

冪函式的非遞迴演算法

快速求正整數次冪,當然不能直接死乘。舉個例子 3 999 3 3 3 3 直接乘要做998次乘法。但事實上可以這樣做,先求出2 k次冪 3 2 3 3 3 4 3 2 3 2 3 8 3 4 3 4 3 16 3 8 3 8 3 32 3 16 3 16 3 64 3 32 3 32 3 128 3...