zoukankan      html  css  js  c++  java
  • 初步

    2017-09-05 22:26:02

    writer:pprp

    参考:http://www.cnblogs.com/yan-boy/archive/2012/11/29/2795294.html

    这位大佬写的很简单易懂

    关键代码如下:

    while(N)
    {
        if(N&1)
            res=res*A;
        n>>=1;
        A=A*A;
    }

    具体代码:

    /*
    @theme:矩阵快速幂
    @writer:pprp
    @begin:21:45
    @end:22:25
    @declare:
    @date:2017/9/5
    */
    
    #include <bits/stdc++.h>
    
    using namespace std;
    
    int N;
    
    struct Matrix
    {
        int a[3][3];
    } origin,res;
    
    
    void Init()
    {
        for(int i = 0 ; i < 3; i++)
        {
            for(int j = 0; j < 3; j++)
            {
                origin.a[i][j] = 1;
                cout << origin.a[i][j] << " ";
            }
            cout << endl;
        }
        cout << endl;
        memset(res.a,0,sizeof(res.a));
        //单位矩阵
        res.a[0][0] =  res.a[1][1] = res.a[2][2] = 1;
    
    }
    
    Matrix multiply(Matrix x, Matrix y)
    {
        Matrix tmp;
        memset(tmp.a,0,sizeof(tmp.a));
        for(int i = 0 ; i < 3; i++)
        {
            for(int j = 0 ; j < 3 ; j++)
            {
                for(int k = 0 ; k < 3; k++)
                {
                    tmp.a[i][j] += x.a[i][k] * y.a[k][j];
                }
            }
        }
        return tmp;
    }
    
    //快速幂关键部分
    //n为指数
    void calc(int n)
    {
        int rec = n;
        while(n)
        {
            if(n & 1)
                res = multiply(res,origin);
            n>>=1;
            origin = multiply(origin,origin);
        }
        cout << rec << "次幂的结果如下:" << endl;
        for(int i = 0 ; i < 3; i++)
        {
            for(int j = 0 ; j < 3; j++)
                cout << res.a[i][j] << " ";
            cout << endl;
        }
    }
    
    
    int main()
    {
    
        while(cin >> N)
        {
            Init();
            calc(N);
        }
        return 0;
    }
  • 相关阅读:
    Median of Two Sorted Arrays
    Two Sum
    C# Socket服务端和客户端互相send和receive
    C++ 虚函数和虚函数表
    C++ 类型转换
    C# 几种退出程序的方式
    进程判断及简单操作
    C#根据函数名称执行对应的函数
    C# DateTime格式化
    nginx常用代理配置
  • 原文地址:https://www.cnblogs.com/pprp/p/7482327.html
Copyright © 2011-2022 走看看