【矩阵乘法+快速幂】数学序列

 数学序列

【问题描述】

    已知一个函数f:

         f(1)=1

         f(2)=1

         f(n)=(a×f(n-1)+b×f(n-2))mod7

    现给出a,b,n,要你求出f(n).

【输入文件】

     每一行输入一组数据分别为A,B,N(1<=A,B<=1000,1<=N<=200000000)

【输出文件】

     每一行输出结果f(n).

【输入样例】

    113
    1210

【输出样例】

    2
    5

=====================

利用矩阵乘法+快速幂

============================

var
  a,b,n:longint;
  jz:array[1..2,1..2]of longint;
procedure init;
begin
  assign(input,'number.in');
  assign(output,'number.out');
  reset(input); rewrite(output);
end;

procedure terminate;
begin
  close(input); close(output);
  halt;
end;

procedure quick(a:longint);
var
  jz_a,jz_n,jz_a1:array[1..2,1..2]of longint;
begin
  jz_a:=jz;
  jz[1,1]:=1; jz[1,2]:=0;
  jz[2,1]:=0; jz[2,2]:=1;
  while a>0 do
    begin
      if a and 1=1 then
        begin
          jz_n[1,1]:=(jz_a[1,1]*jz[1,1]+jz_a[1,2]*jz[2,1])mod 7;
          jz_n[1,2]:=(jz_a[1,1]*jz[1,2]+jz_a[1,2]*jz[2,2])mod 7;
          jz_n[2,1]:=(jz_a[2,1]*jz[1,1]+jz_a[2,2]*jz[2,1])mod 7;
          jz_n[2,2]:=(jz_a[2,1]*jz[1,2]+jz_a[2,2]*jz[2,2])mod 7;
          jz:=jz_n;
        end;
      jz_a1[1,1]:=(jz_a[1,1]*jz_a[1,1]+jz_a[1,2]*jz_a[2,1])mod 7;
      jz_a1[1,2]:=(jz_a[1,1]*jz_a[1,2]+jz_a[1,2]*jz_a[2,2])mod 7;
      jz_a1[2,1]:=(jz_a[2,1]*jz_a[1,1]+jz_a[2,2]*jz_a[2,1])mod 7;
      jz_a1[2,2]:=(jz_a[2,1]*jz_a[1,2]+jz_a[2,2]*jz_a[2,2])mod 7;
      jz_a:=jz_a1;
      a:=a shr 1;
    end;
end;

procedure main;
begin
  while not eof do
    begin
      readln(a,b,n);
      jz[1,1]:=0;  jz[1,2]:=1;
      jz[2,1]:=b;  jz[2,2]:=a;
      if n<=2 then begin writeln(1); terminate; end
      else begin
             n:=n-2;
             quick(n);
           end;
      writeln((jz[2,1]+jz[2,2])mod 7);
    end;
end;

begin
  init;
  main;
  terminate;
end.     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值