[Tyvj 1118/1119]a^b

描述

求a^b
由于结果可能很大,我们现在只需要知道这个值
mod 1012就可以了(为什么是1012?我的生日)
a<1000000
b<1000000

输入格式

第一行两个数 a b

输出格式

一行,就是mod 1012的值

测试样例1

输入

2 2

输出

4

  • 快速幂
  • 一直看到的公式是 a^b mod n=(a mod n)^(b mod n),但怎么感觉是错的QAQ
var
 a,b:longint;
 ans:longint;
function f(a,b,c:longint):longint;
var t,y:longint;
begin
 t:=1; y:=a;
 while b<>0 do
  begin
   if (b and 1)=1
   then t:=t*y mod c;
   y:=y*y mod c;
   b:=b shr 1;
  end;
 exit(t);
end;

begin
 readln(a,b);
 a:=a mod 1012;
 //b:=b mod 1012;
 ans:=f(a,b,1012);
 writeln(ans);
end.
var
 a,b:longint;
 ans,n,i:longint;
function f(a,b,c:longint):longint;
var t,y:longint;
begin
 t:=1; y:=a;
 while b<>0 do
  begin
   if (b and 1)=1
   then t:=t*y mod c;
   y:=y*y mod c;
   b:=b shr 1;
  end;
 exit(t);
end;

begin
 readln(n);
 for i:=1 to n do
 begin
  readln(a,b);
  a:=a mod 1012;
  ans:=f(a,b,1012);
  writeln(ans);
 end;
end.

你可能感兴趣的:([Tyvj 1118/1119]a^b)