设为首页 加入收藏

TOP

uva 12470(矩阵快速幂)
2015-11-21 01:00:32 来源: 作者: 【 】 浏览:3
Tags:uva 12470 矩阵 快速

题意:公式f(n) = f(n - 1) + f(n - 2) + f(n - 3),给出n,f(1) = 0,f(2) = 1, f(3) = 2,要求得出f(n)。
题解:普通的矩阵快速幂模板题。

#include 
   
     #include 
    
      const int MOD = 1000000009; struct Mat { long long g[3][3]; }ori, res; long long n; Mat multiply(Mat x, Mat y) { Mat temp; for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++) { temp.g[i][j] = 0; for (int k = 0; k < 3; k++) temp.g[i][j] = (temp.g[i][j] + x.g[i][k] * y.g[k][j]) % MOD; } return temp; } void calc(long long n) { while (n) { if (n & 1) ori = multiply(ori, res); n >>= 1; res = multiply(res, res); } } int main() { while (scanf("%lld", &n) && n) { if (n == 1 || n == 2 || n == 3) { printf("%lld\n", n - 1); continue; } memset(ori.g, 0, sizeof(ori)); memset(res.g, 0, sizeof(res)); ori.g[0][0] = 2; ori.g[0][1] = 1; ori.g[0][2] = 0; res.g[0][0] = res.g[1][0] = res.g[2][0] = 1; res.g[0][1] = res.g[1][2] = 1; calc(n - 3); printf("%lld\n", ori.g[0][0]); } return 0; }
    
   
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇hdu 3658(矩阵快速幂) 下一篇hdu5256 序列变换 最长递增子序列

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: