矩阵快速幂模板

先贴个整数快速幂

#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
ll b,p,k,ans=1,res;

int main(){
    scanf("%lld%lld%lld",&b,&p,&k);
    cout<<b<<"^"<<p<<" mod "<<k<<"=";
    while(p){
        if(p&1)ans=ans*b%k;
        b=b*b%k;
        p=p>>1;
    }
    cout<<ans%k<<endl;
}

矩阵快速幂https://www.cnblogs.com/cmmdc/p/6936196.html

代码如下

#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
const int maxn=1e2+5;
const ll mod= 1e9+7;
struct matrix{
    ll m[maxn][maxn];
}ans,res;
ll n,N;

matrix mul(matrix a,matrix b){
    matrix tmp;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            tmp.m[i][j]=0;
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            for(int k=1;k<=n;k++){
                tmp.m[i][j]=(tmp.m[i][j]+(a.m[i][k]*b.m[k][j])%mod)%mod;
            }
        }
    }
    return tmp;
}
void quickpow(ll N,ll n){
    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,ans);
        res=mul(res,res);
        N=N>>1;
    }
}
int main(){
    scanf("%lld%lld",&n,&N);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            scanf("%lld",&res.m[i][j]);
        }
    }
    quickpow(N,n);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cout<<ans.m[i][j]<<" ";
        }
        cout<<endl;
    }
    return 0;
}

 

原文链接: https://www.cnblogs.com/mohari/p/12945187.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    矩阵快速幂模板

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/350410

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午6:18
下一篇 2023年3月2日 上午6:19

相关推荐