首先,%%%Kvein
快速幂
#include<iostream>
#include<cstdio>
using namespace std;
long long tem=1;
long long p;
long long ans=1;
long long b;
long long k;
long long power(){
while(p){
if(p&1){
ans*=b;
ans%=k;
}
b*=b;
b%=k;
p/=2;
}
return ans;
}
int main(){
scanf("%lld%lld%lld",&b,&p,&k);
printf("%lld^%lld mod %lld=",b,p,k);
cout<<(power()+k)%k;
return 0;
}
矩阵快速幂
#include<cstdio>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
long long n,k;
long long ans[101][101];
long long tem[101][101];
long long li[101][101];
long long mod=1000000007;
void tim1(){
memset(li,0,sizeof(li));
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
for(int k=1;k<=n;++k){
li[i][j]=(li[i][j]+(tem[i][k]*ans[k][j])%mod);
li[i][j]%=mod;
}
}
}
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
ans[i][j]=li[i][j];
}
}
return ;
}
void tim2(){
memset(li,0,sizeof(li));
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
for(int k=1;k<=n;++k){
li[i][j]=(li[i][j]+(tem[i][k]*tem[k][j])%mod);
li[i][j]%=mod;
}
}
}
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
tem[i][j]=li[i][j];
}
}
return ;
}
void power() {
while(k){
if(k&1){
tim1();
}
tim2();
k>>=1;
}
return ;
}
int main(){
scanf("%lld%lld",&n,&k);
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
scanf("%lld",&ans[i][j]);
tem[i][j]=ans[i][j];
}
}
k--;
power();
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
cout<<ans[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
快速乘