求A^B Mod N 的值....

http://unbelievable.ycool.com/post.706759.html

 

这是做ZJU 2150 时候学习的
在 实用算法的分析和程序设计上有介绍.....

大致思想 是把 B (即 指数) 转化为 2 进制....  从低位往高位算.... 若当前这位为 1 则 d:=d*t mod n;  否则就不断的把 t:=t*t mod n .....

自己还是不太清楚原理.....  干脆死记算了......


function answer(a,b,n:longint):longint;
var d,t:longint;
begin
 d:=1; t:=a;
 while b>0 do begin
   if b mod 2=1 then d:=d*t mod n;
   b:=b div 2; t:=t*t mod n;
 end;
 answer:=d;
end;


 

posted @ 2008-12-05 15:22  jesonpeng  阅读(160)  评论(0)    收藏  举报