给你一道例题吧。
Time Limit: 3 second
Memory Limit: 2 MB
【问题描述】
输入b,p,k的值,求bp mod k的值。其中b、p、k*k为长整形数。
【输入格式】
1行。先后为b、p、k的值,中间用空格隔开
【输出格式】
仅1行。b^p mod k的结果值(mod的前后有一个空格,等号前后无空格)
【输入样例】
2 10 9
【输出样例】
2^10 mod 9=7
【代码】
原理是 (a *b ) mod c =((a mod c)*(b mod c)) mod c
var
b,p,k,rest:longint;
procedure try(x:longint);
begin
if x=0 then exit;
try(x div 2);
rest:=rest*rest mod k;
if odd(x) then//odd是判断这个数是否为奇数,如果是则返回true
rest:=b mod k * rest mod k;
end;
begin
readln(b,p,k);
rest:=1;
try(p);
writeln(b,'^',p,' mod ',k,'=',rest);
end.