C/C+中的快速整数矩阵求幂算法+;

C/C+中的快速整数矩阵求幂算法+;,c,algorithm,C,Algorithm,如何实现快速nxn整数矩阵求幂算法M^n 矩阵不可对角化,也不对称。 我已经通过平方运算实现了算法的幂运算,但我知道还有更快的算法。 我不想使用数字库 特征向量/值答案适用于所有对称矩阵,但不是所有矩阵,我需要一个通用算法。因此,我的问题需要你指出的上一个答案之外的其他答案,并将我的问题标记为重复 这是我的平方码,但我需要一个更快的算法: ww是矩阵的大小 void expo(int ww, ll n) { int i,j,k; memset(ret,0,SZ); for(i=

如何实现快速nxn整数矩阵求幂算法M^n
矩阵不可对角化,也不对称。
我已经通过平方运算实现了算法的幂运算,但我知道还有更快的算法。
我不想使用数字库

特征向量/值答案适用于所有对称矩阵,但不是所有矩阵,我需要一个通用算法。因此,我的问题需要你指出的上一个答案之外的其他答案,并将我的问题标记为重复

这是我的平方码,但我需要一个更快的算法: ww是矩阵的大小

void expo(int ww, ll n)
{
   int i,j,k;
   memset(ret,0,SZ);
   for(i=0;i<ww;i++)ret[i][i]=1;
   while(n){
     if(n&1){
       memset(tmp,0,SZ);
       for(i=0;i<ww;i++)
         for(j=0;j<ww;j++)
           for(k=0;k<ww;k++)
             tmp[i][j]+=ret[i][k]*mat[k][j];
       memcpy(ret,tmp,SZ);
     }
     memset(tmp,0,SZ);
     for(i=0;i<ww;i++) 
       for(j=0;j<ww;j++)
         for(k=0;k<ww;k++)
           tmp[i][j]+=mat[i][k]*mat[k][j];
     memcpy(mat,tmp,SZ);
     n>>=1;
   }
 }
void博览会(国际ww,ll n)
{
int i,j,k;
memset(ret,0,SZ);

对于(i=0;是时候发布一个最简单的代码示例来演示您到目前为止的成果了。我已经通过平方运算编辑并添加了我的Expo代码。我想如果您想让它对大指数有效,您应该首先将矩阵放入或类似的函数中。因此,还有其他线程;对于非整数矩阵,有特征值方法。F或者矩阵乘法,Strassen方法对NSee没有任何优势。请注意,几乎肯定会遇到整数溢出。因此整数不会做你想做的事情。