skip to main
|
skip to sidebar
Owen-Money's algorithm
A(anime)C(comic)G(game)N(novel)P(programming)五管齊下
2009年3月6日 星期五
模指數運算的三個方法
運算型如b^n mod m的演算法 方法一: 先將n表示成二進位
procedure base 2 expansion(n:positive integer)
q:=n
k:=0
while q!=0
begin
a[k]:=q mod 2
q:=q/2
k:=k+1
end
{the base 2 expansion of n is (a[k-1]...a[1]a[0])binary}
接著使用同餘性質以非常不直觀的方式寫成:
procedure modular exponentiation(b:integer,n=(a[k-1]a[k-2]...a[1]a[0])binary,m:positive integers)
x:=1
power:=b mod m
for i:=0 to k-1
begin
if a[i]=1 then x:=(x*power) mod m
power:=(power^2) mod m
end
{x equals b^n mod m}
方法二: 使用直觀的遞迴演算 利用b^n mod m=(b*(b^(n-1) mod m)) mod m 及初始條件b^0 mod m=1 就可簡單地作成exp_mod_rec(int,int,int); 方法三: 利用n的奇偶性的遞迴運算
procedure mpower(b,n,m:integers)
if n=0 then
mpower(b,n,m)=1
else if n is even then
mpower(b,n,m)=mpower(b,n/2,m)^2 mod m
else
mpower(b,n,m)=(mpower(b,n/2,m)^2 mod m * b mod m) mod m
{mpower(b,n,m)=b^n mod m}
個人是認為 1<=b<m 似乎不需要這個限制。 目前最大的瓶頸是複雜度的求法...... 程式實作如下
沒有留言:
張貼留言
較新的文章
首頁
訂閱:
張貼留言 (Atom)
熊喵
meruru no atelier
いろとりどりのセカイ
Search my space
關於我自己
Owen-Money
尋找自己的容身之處
檢視我的完整簡介
標籤
日常
(1)
時事
(1)
魔法少女まどか☆マギカ
(1)
A
(1)
a no hana
(1)
algorithm
(1)
asm
(1)
book
(1)
C++
(6)
drawing
(2)
G
(1)
meruru no atelier
(1)
miku
(1)
music
(3)
N
(1)
Narcissu
(1)
News
(2)
Nichijou
(1)
P
(8)
ps3
(1)
supercell
(1)
Visual Novel
(1)
yuruyuri
(1)
あの花
(1)
ムシウタ
(1)
ゆるゆり
(1)
FLAG counter
總網頁瀏覽量
網誌存檔
►
2011
(14)
►
9月
(1)
►
8月
(1)
►
7月
(5)
►
5月
(1)
►
4月
(1)
►
3月
(3)
►
2月
(2)
►
2010
(5)
►
6月
(3)
►
2月
(2)
▼
2009
(2)
►
4月
(1)
▼
3月
(1)
模指數運算的三個方法
沒有留言:
張貼留言