poj3070

来源:互联网 发布:移动网络经纪人 编辑:程序博客网 时间:2024/05/11 19:31

【题意】

求斐波那契数列的第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.


原创粉丝点击