高速電力と迅速なマトリックス電力動作

高速電力行列と迅速なパワー

(A)高速電力テンプレート(整数速い累乗のx ^ N)

栗のために

= 1011進数11進

^ 11 = 1011 ^ 3 = 3 ^ 8 3 3 ^ 2 ^ 1 3

int QuickPow(int x,int N)
{
    int res = x;    //res表示当前底数
    int ans = 1;    //ans表示当前值
    whlle(N)
    {
        if(N&1)
        {
            ans = ans * res;
        }
        res = res * res;
        N = N >> 1; 
    }
    return ans;
}

解像度とANSボードの役割の理解を注意してください

(II)高速電力行列(行列A、A ^ MのM乗)

まずボードを発表

struct Matrix
{
    int m[maxn][maxn];
}ans,res;
//计算矩形乘法的函数,参数是矩阵 A 和矩阵 B 和一个 n(阶数) 
Maxtrix Mul(Maxtrix A, Maxtrix B, int n)
{
    Maxtrix temp;//定义一个临时矩阵,存放A*B的结果
    for(int i=1; i<=n; i++)
        for(int j=1; j<=n; j++)
            temp.m[i][j] = 0;//初始化temp
    for(int i=1; i<=n; i++)
        for(int j=1; j<=n; j++)
            for(int k=1; k<=n; k++)
                temp.m[i][j] += A.m[i][j]*B.m[i][j];
    return temp;
}
void QuickPower(int N, int n)
{
    //对应整数快速幂,矩阵快速幂的 ans 应该初始化为单位矩阵
    for(int i=1; i<=n; i++)
        for(int j=1; j<=n; j++)
        {
            if(i == j) ans.m[i][j] = 1;
            else ans.m[i][j] = 0;
        }
        while(N)
        {
            if(N&1)
                ans = Mul(res, res);
            res = Mul(res, res);
            N = N >> 1;
        }
}

(1)よく知られている:フィボナッチ数再帰式:. F [N] = F [N-1] + F [N-2] [2] 1 = F、F [1] = 1、シーク値F [N];及び

(2)変異体Fは、[N] = [1-N-] F. + Bを F. F [2-N-] F [1] = 1。 [2] = 1、 F [n]の値を見つけます。

(3)変形例F [n]は= F.を[1-N-] B + F. [2-N-] C. + F [1] = 1、F [2] = 1、 見つけるF [n]の値;

おすすめ

転載: www.cnblogs.com/double-points/p/11486712.html