【题意】
求斐波那契数列的第n项mod 10000的值
【输入】
多组数据
每组数据一行,一个数字表示n
数据以n=-1结束
【输出】
对于每组数据,输出答案
题目上说得很明白做法,
矩阵乘法
program poj3070;
type
square=array [1..2,1..2] of longint;
var
n,i,j,k:longint;
root,ans:square;
function multiply (a,b:square):square;
var
i,j,k:longint;
ans:square;
begin
fillchar(ans,sizeof(ans),0);
for i:=1 to 2 do
for j:=1 to 2 do
for k:=1 to 2 do
ans[i,j]:=(ans[i,j]+a[i,k]*b[j,k]) mod 10000;
exit(ans);
end;
procedure quick (now:longint);
begin
if now=1 then
begin
ans:=root;
exit;
end;
quick(now div 2);
ans:=multiply(ans,ans);
if now and 1 = 1 then ans:=multiply(ans,root);
end;
begin
root[1,1]:=1;
root[1,2]:=1;
root[2,1]:=1;
root[2,2]:=0;
repeat
read(n);
if n=-1 then break;
if n=0 then
begin
writeln(0);
continue;
end;
if n<=2 then
begin
writeln(1);
continue;
end;
quick(n);
writeln(ans[2,1]);
until false;
end.