题目:
输入b,p,k的值,求b^p mod k 的值,其中b,p,k*k都是长整形。
这道题的难点是这几个数都是longint,如果硬算一定会超时。但A*B mod K=(a mod k)*(b mod k) mod k.
我们把它转二进制,a[i]=1 则*b。
代码如下:
var a:array[0..2501] of integer;
b,p,k,t,r,l,i:longint;
begin
read(b,p,k);
t:=p;
while t<>0 do
begin
inc(l);
a[l]:=t mod 2;
t:=t div 2;
end;
r:=1;
for i:=l downto 1 do
begin
t:=r*r mod k;
if a[i]=1 then r:=b mod k*t mod k else r:=t;
end;
write(b,'^',p,' mod ',k,'=',r);
end.//未经过允许,严禁copy标