首页 > 其他 > 详细

POJ3070Fibonacci

时间:2017-02-04 20:17:32      阅读:234      评论:0      收藏:0      [点我收藏+]

矩阵乘法裸题

求快速幂

#include<iostream>
#include<cstdio>
#define ll long long
#define Mod 10000

using namespace std;
struct node
{
    int m[2][2];
}ans,base;

node mul(node a,node b)
{
    node tmp;
    for(int i=0;i<2;i++)
      for(int j=0;j<2;j++)
      {
          tmp.m[i][j]=0;
          for(int k=0;k<2;k++)
          {
              tmp.m[i][j]=(tmp.m[i][j]+a.m[i][k]*b.m[k][j])%Mod;
        }
      }
    return tmp;
}

ll qw(ll n)
{
    base.m[0][0]=1;base.m[0][1]=1;
    base.m[1][0]=1;base.m[1][1]=0;
    ans.m[0][0]=1;ans.m[0][1]=0;
    ans.m[1][0]=0;ans.m[1][1]=1;
    while(n)
    {
        if(n&1) ans=mul(ans,base);
        base=mul(base,base);
        n>>=1;
    }
    return ans.m[0][1];
}

int main()
{
    int n;
    while(scanf("%d",&n)&& n!=-1)
    {   
          printf("%d\n",qw(n));
    }
    return 0;
}

 

POJ3070Fibonacci

原文:http://www.cnblogs.com/L-Memory/p/6366210.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!