我有一个矩阵 [2,2][1,0]。我需要这个 2*2 矩阵的第 n 次乘法。当我使用简单乘法时,我可以在 O(n) 或 O(logn) 中进行。O(登录)代码:
int NUM(int n)
{
int F[2][2] = {{2,2},{1,0}};
if(n == 0)
return 0;
power(F, n-1);
return F[0][0];
}
/* Optimized version of power() */
void power(int F[2][2], int n)
{
if( n == 0 || n == 1)
return;
int M[2][2] = {{2,2},{1,0}};
power(F, n/2);
multiply(F, F);
if( n%2 != 0 )
multiply(F, M);
}
它在 n 的小值下工作得很好。但是一旦 n 是 10^9 或更多。int,long int 甚至 long long int 都不起作用。所以,我相信这种方法似乎没有多大帮助.
基本上我的问题是:数字变得相当大,甚至没有 long long int。那我该如何处理。
当 n 为 10^9 时,谁能建议我任何公式或算法来获得 2*2 矩阵[2,2][1,0] 的 n 次方?
谢谢