记录编号 75492 评测结果 WWWWAWAWWW
题目名称 eins 最终得分 20
用户昵称 Gravatar钨铅 是否通过 未通过
代码语言 Pascal 运行时间 3.612 s
提交时间 2013-10-27 23:56:29 内存使用 0.15 MiB
显示代码纯文本
program eins;
type matrix=array[1..2,1..2]of longint;
var a,c:matrix;
    b,ans:array[1..2]of longint;
    i,j,n,mo,t,q:longint;
function mul(a,b:matrix;n,r,m:longint):matrix;
var c:matrix;
    i,j,k:longint;
begin
fillchar(c,sizeof(c),0);
for i:=1 to n do
 for j:=1 to m do
  for k:=1 to r do c[i,j]:=(c[i,j]+a[i,k]*b[k,j]) mod mo;
mul:=c;
end;
function mpower(a:matrix;n,r,m,x:longint):matrix;
var c:matrix;
begin
if x=1 then mpower:=a else begin
                           c:=mpower(a,n,r,m,x shr 1);
                           c:=mul(c,c,n,r,m);
                           if odd(x) then mpower:=mul(c,a,n,r,m)
                                     else mpower:=c;
                           end;
end;
begin
assign(input,'eins.in');
assign(output,'eins.out');
reset(input);
rewrite(output);
read(t);
for q:=1 to t do begin
a[1,1]:=0;
a[1,2]:=1;
a[2,1]:=1;
a[2,2]:=1;
b[1]:=1;
b[2]:=1;
fillchar(ans,sizeof(ans),0);
fillchar(c,sizeof(c),0);
read(n,mo);
if n=1 then begin
            writeln('1');
            continue;
            end;
c:=mpower(a,2,2,2,n-1);
for i:=1 to 2 do
 for j:=1 to 2 do ans[i]:=(ans[i]+b[j]*c[j,i]) mod mo;
writeln(ans[1]);
end;
close(input);
close(output);
end.