SSL 1531 斐波那契数列Ⅳ 矩阵乘法

题意:求数列f[n]=f[n-2]+f[n-1]+n+1的第N项mod 9973,其中f[1]=1,f[2]:=1.N(1<N<2^31-1)

分析:可以构造矩阵A

0 1 0 0

1 1 0 0

0 1 1 0

0 1 1 1

然后再用矩阵【f[1],f[2],3,1】*A^n-1的第一项就是答案了。

代码:

const
  p=9973;

type
  arr=array[1..4,1..4] of longint;

var
  n,i:longint;
  c,d:arr;

procedure cheng(a,b:arr);
var
  i,j,k:longint;
begin
  fillchar(c,sizeof(c),0);
  for i:=1 to 4 do
    for j:=1 to 4 do
      for k:=1 to 4 do
        c[i,j]:=(c[i,j]+a[i,k]*b[k,j]) mod p;
end;

procedure ksm(x:longint);
begin
  if x=1 then exit;
  ksm(x div 2);
  cheng(c,c);
  if x mod 2=1 then cheng(c,d);
end;

begin
  d[1,2]:=1; d[2,1]:=1; d[2,2]:=1; d[3,2]:=1; d[3,3]:=1;
  d[4,2]:=1; d[4,3]:=1; d[4,4]:=1;
  c:=d;
  readln(n);
  ksm(n-1);
  writeln((c[1,1]+c[2,1]+c[3,1]*3+c[4,1]) mod p);
end.


你可能感兴趣的:(SSL 1531 斐波那契数列Ⅳ 矩阵乘法)