zoukankan      html  css  js  c++  java
  • 矩阵快速幂模版

    其实大致的步骤和正数快速幂是一样的,只不过它是矩阵。

     1 #include <stdio.h>
     2 #include <iostream>
     3 #include <algorithm>
     4 #include <string.h>
     5 #include <stdlib.h>
     6 #include <math.h>
     7 #include <queue>
     8 #include <set>
     9 
    10 #define INF 0x3f3f3f3f
    11 #define pii pair<int,int>
    12 #define LL long long
    13 using namespace std;
    14 typedef unsigned long long ull;
    15 const int mod = 1000000009;
    16 const int N = 10;
    17 
    18 LL tmp[N][N],res[N][N];
    19 
    20 void multi(LL a[][N],LL b[][N],int n){
    21     memset(tmp,0, sizeof(tmp));
    22     for (LL i=0;i<n;i++){
    23         for (LL j=0;j<n;j++){
    24             for (LL k=0;k<n;k++){
    25                 tmp[i][j] += (a[i][k]*b[k][j]) % mod;
    26             }
    27             tmp[i][j] = tmp[i][j] % mod;
    28         }
    29     }
    30     for (LL i=0;i<n;i++){
    31         for (LL j=0;j<n;j++)
    32             a[i][j] = tmp[i][j];
    33     }
    34 }
    35 
    36 void Pow(LL a[][N],LL m,int n){
    37     memset(res,0, sizeof(res));
    38     for (LL i=0;i<n;i++){
    39         res[i][i] = 1;
    40     }
    41     while (m){
    42         if (m & 1){
    43             multi(res,a,n);
    44         }
    45         multi(a,a,n);
    46         m >>= 1;
    47     }
    48 }
    49 LL a[N][N];
    50 
    51 int main(){
    52     LL m;
    53     int n;
    54     while (~scanf("%lld",&m)){
    55         n = 2;
    56         a[0][0] = a[0][1] = a[1][0] = 1;
    57         a[1][1] = 0;
    58         Pow(a,m-1,n);
    59         printf("%lld
    ",res[0][0]%mod);
    60     }
    61     return 0;
    62 }
  • 相关阅读:
    2017-10-11seowhy记录
    2017.8.23创业项目方向
    西安项目分析
    创业方法
    做seowhy官网需要三个人
    2017.8.2 高级长尾编辑技巧
    Golang 任务队列策略 -- 读《JOB QUEUES IN GO》
    Go 到底有没有引用传参(对比 C++ )
    使用xorm工具,根据数据库自动生成 go 代码
    golang的Channel
  • 原文地址:https://www.cnblogs.com/-Ackerman/p/11338662.html
Copyright © 2011-2022 走看看