概述
a^b2
题目描述
求a^b 由于结果可能很大,我们现在只需要知道这个值mod 1012就可以了(为什么是1012?我的生日)
有N组数n<=5
a<=100
b<=maxlongint;
输入格式
第1行1个数 n第2到n+1行 两个数a,b
输出格式
n行 每个a^b mod 1012的值
样例输入
1
2 2
样例输出
4
#include<iostream>
using namespace std;
typedef long long ll;
ll fastpow(ll a,ll k,ll m){
ll res=1;
while(k){
if(k&1)
res=(res*a)%m;
a=(a*a)%m;
k>>=1;//k/2;
}
return res;
}
int main(){
ll n,a,k;
cin>>n;
while(n--){
cin>>a>>k;
cout<<fastpow(a,k,1012)<<endl;
}
return 0;
}
矩阵乘法
题目描述
给出两个矩阵A和B,求两个矩阵相乘的结果C
相乘的方法是:假设矩阵A是n行m列的矩阵,矩阵B是m行k列的矩阵,矩阵C会得到一个n行k列的矩阵。
矩阵C中第i行,第j列的元素,值为:矩阵A的第i行,与矩阵B的第j列的对应元素,相乘相加的结果。
例如:A是4行3列的矩阵,B是3行2列的矩阵。
矩阵A为:
1 2 3
4 5 6
1 1 1
2 2 2
矩阵B为:
6 5
7 1
8 8
则:
C[1][1]=1*6+2*7+3*8=6+14+24=44;
C[1][2]=1*5+2*1+3*8=5+2+24=31;
C[2][1]=4*6+5*7+6*8=24+35+48=107;
C[2][2]=4*5+5*1+6*8=20+5+48=73;
C[3][1]=1*6+1*7+1*8=6+7+8=21;
C[3][2]=1*5+1*1+1*8=5+1+8=14;
C[4][1]=2*6+2*7+2*8=12+14+16=42;
C[4][2]=2*5+2*1+2*8=10+2+16=28;
输入格式
第一行三个正整数 n,m,k。( 0 < n,m,k < 100)
接下来的n行,每行m个数,表示矩阵A。
在后面的m行,每行k个数,表示矩阵B。
输出格式
输出矩阵C。
样例输入
4 3 2
1 2 3
4 5 6
1 1 1
2 2 2
6 5
7 1
8 8
样例输出
44 31
107 73
21 14
42 28
#include<iostream>
using namespace std;
const int MAX=110;
int a[MAX][MAX],b[MAX][MAX],c[MAX][MAX];
int n,m,k;
void mul(){
for(int i=0;i<n;i++)
for(int j=0;j<k;j++)
for(int l=0;l<m;l++)
c[i][j]+=a[i][l]*b[l][j];
}
int main(){
cin>>n>>m>>k;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>a[i][j];
for(int i=0;i<m;i++)
for(int j=0;j<k;j++)
cin>>b[i][j];
mul();
for(int i=0;i<n;i++){
for(int j=0;j<k;j++)
cout<<c[i][j]<<" ";
cout<<endl;
}
}
最后
以上就是光亮康乃馨为你收集整理的矩阵快速幂(可以起到优化dp动态规划的作用)的全部内容,希望文章能够帮你解决矩阵快速幂(可以起到优化dp动态规划的作用)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复