zoukankan      html  css  js  c++  java
  • POJ-3070-矩阵快速幂

    这题用矩阵快速幂很好写,矩阵相乘其实很简单,然后快速幂也很简单,就是让矩阵做乘法的时候,使用快速幂的思想就可以了,写代码的时候要注意,快速幂之前,ans数组是单位阵,res是用来求斐波那契的矩阵,然后我们返回数组并不方便,所以直接赋值就可以了,但是局部变量中,数组的初始值并不是0,所以需要初始化。

    #include <iostream>
    #include <cstdio>
    
    int a[25];
    int n;
    const int ONum = 2;
    const int mod = 10000;
    int res[ONum][ONum];
    int ans[ONum][ONum];
    
    void MaxtrixMul(int a[][ONum],int b[][ONum])
    {
        int tmp[ONum][ONum];
        for (int i = 0; i < ONum;i++) {
            for (int j = 0; j < ONum;j++) {
                tmp[i][j] = 0;
            }
        }
        for (int i = 0; i < ONum; i++)
        {
            for (int j = 0; j < ONum; j++)
            {
                for (int k = 0; k < ONum; k++)
                {
                    tmp[i][j] =(tmp[i][j] + a[i][k] * b[k][j]) % mod;
                }
            }
        }
        for (int i = 0; i < ONum;i++) {
            for (int j = 0; j < ONum;j++) {
                a[i][j] = tmp[i][j];
            }
        }
    }
    
    void MaxtrixQuickpow(int num)
    {
        ans[0][0] = ans[1][1] = 1;
        res[0][0] = res[0][1] = res[1][0] = 1;
        ans[1][0] = ans[0][1] = res[1][1] = 0;
        while (num) {
            if (num&1) {
                MaxtrixMul(ans, res);
            }
            MaxtrixMul(res, res);
            num >>= 1;
        }
    }
    
    int main()
    {
        a[1] = 1;
        for (int i = 2; i <= 20;i++) {
            a[i] = a[i - 1] + a[i - 2];
        }
    
        while (scanf("%d", &n) && n != -1) {
            if (n <= 20) {
                printf("%d
    ", a[n]);
                continue;
            }
            MaxtrixQuickpow(n-1);
            printf("%d
    ", ans[0][0]);
        }
    
        return 0;
    }
    /*
    1000000000
    */
    
  • 相关阅读:
    Javascript(js)分页程序
    Erlang gb_trees
    ASP.NET MVC 扩展之 JsonpResult ,用来提供轻量级跨域调用服务
    facebook folly编译脚本
    开源项目 XDD
    ObjectiveC——消息、Category和Protocol
    Lua编译执行与错误
    ASP.NET MVC 4 RC的JS/CSS打包压缩功能
    web插件化
    精益企业应用平台
  • 原文地址:https://www.cnblogs.com/xyqxyq/p/12328898.html
Copyright © 2011-2022 走看看