矩阵快速幂

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

矩阵乘法
在计算机中,一个矩阵实际上就是一个 二维数组。一个n行m列的矩阵与一个 m行p列的矩阵可以相乘,得到的结果 是一个n行p列的矩阵,其中的第i行第 j列位置上的数为第一个矩阵第i行上 的m个数与第二个矩阵第j列上的m个 数对应相乘后所得的m个乘积之和。
矩阵乘法
hrbust1143 Input 输入数据第一行三个整数m,n,p,分别代表有两个矩阵 A[M][N] B[N][P],接下来是A,B两个矩阵,M、N、P 均小于100,矩阵中所有数据范围为[0, 1000],且均为 整数。 Output 将矩阵输出,每两个数字之间只有一个空格。 Sample Input Sample Output 2 2 3 12 9 6 1 2 30 23 16 3 4 6 5 4 3 2 1
快速幂
a(0 <= a <= 2000000000) b(1 <= b <= 2000000000)
首先求a^b
but~
a、b的范围太大?不能暴力循环!
怎么办?
快速幂
快速幂 只需计算log(b)次 还不超过40次!!!!即可解出 but问题又出现了! 不超时了,但是超范围了!! 2000000000^2000000000 用int、long long 、unsigned long long是装不下的!
即(a^b+8)%9+1 边计算边取模,整个过程只有乘法操作,不影响最终结果 int pow(int a,int k) //计算a^k,并最终结果对9取摸 { if(k==0) return 1; if(k==1) return a%9; if(k%2==0) return (g((a%9)*(a%9),k/2)%9); if(k%2==1) return (a%9)*(g((a%9),k-1)%9); }
[ f[n] [ f[n] [
f[n-1] f[n]
]* [ ]= f[n-1]+f[n] ]= f[n+1] ]
01 11
矩阵快速幂
例如: f(n)= a*f(n-1)+b*f(n-2) f(n)= a*f(n-1)+b*f(n-2)+c*f(n-3)
[f(n-1),f(n-2)]*[ [f(n) ,f(n-1)]
A=[ B=[
f[0] f[1] f[1] f[2]
]
01 11
]
即求出A· B^n即可
矩阵快速幂
由于矩阵乘法没有交换律,只有结合律 所以先求出B^n,命C=B^n 再求出A· C,即是最后你想要的矩阵
一个公式只对应一个矩阵么?
矩阵是唯一的么? 公式怎样推出矩阵呢?
矩阵快速幂
f[0]=0; f[1]=1; …… f[n]=f[n-1]+f[n-2]
矩阵快速幂
练习: f(n)= a*f(n-1)+b*f(n-2)+c*f(n-3)
[f(n-1),f(n-2),f(n-3)]*[ [f(n) ,f(n-1),f(n-2)]
]=
a10 b01 c00
Thank you~
]=
a1 b0
矩阵快速幂
[f(n-1),f(n-2)]*[ [f(n) ,f(n-1)] ]=
a1 b0
将[f(n-1),f(n-2)]看做为A,则A‘为 [f(n) ,f(n-1)],即将所有下标+1即可 现在求我们所需要的B矩阵,有A和A’求B就简单 了 f[n]与f[n-1]、f[n-2]有什么关系, 第一列就写什么。 f[n-1]与f[n-1]、f[n-2]有什么关系, 第二列就写什么
ACM矩阵快速幂
哈尔滨理工大学ACM集训队
• 矩阵乘法 • 快速幂 • 矩阵快速幂
矩阵乘法
矩阵乘法
矩阵乘法: 只有当矩阵A的列数与矩阵B的行数相等时 A×B才有意义。一个m×n的矩阵a (m,n)左乘一个n×p的矩阵b(n,p),会 得到一个m×p的矩阵c(m,p),满足 矩阵乘法满足结合律,但不满足交换律 同大家线性代数中所学的矩阵乘法
源自文库
取模+超时---->快速幂 but 公式怎么快速幂呢?
矩阵快速幂
f[0]=0; f[1]=1; …… f[n]=f[n-1]+f[n-2]
]* [ ]= [ f[n] f[n-1]+f[n] ] [ f[n+1] f[n]+f[n+1]
f[n-1] f[n] f[n] f[n+1] 01 11
矩阵快速幂
快速幂
hrbust1140_递归快速幂.cpp hrbust1140_循环快速幂.cpp
矩阵快速幂
矩阵快速幂
计算前1000 000 000项斐波那契数,结果MOD 10007 f[0]=0; f[1]=1; …… f[n]=f[n-1]+f[n-2]
如果循环1000 000 000次一定会超时!
快速幂
大数? NO! 数字和的公式(x+8)%9+1 即(a^b+8)%9+1 同余模定理(具体学习课下百度): (a+b)%mod=( a%mod + b%mod )%mod (a*b)%mod=( (a%mod) * (b%mod) )%mod 同样a+b+c+…与a*b*c*…一样满足
快速幂
矩阵乘法
hrbust1143.cpp
快速幂
hrbust1140 数字和问题 Description 定义一种操作为:已知一个数字,对其各位数字 反复求和,直到剩下的数是一位数不能求和为止。 例如:数字2345,第一次求和得到2 + 3 + 4 + 5 = 14 ,再对14的各位数字求和得到1 + 4 = 5,得到5将不再 求和。 现在请你求出对a^b进行该操作后,求最终得到的数字. Input 第一行,包含两个数字a(0 <= a <= 2000000000)和b (1 <= b <= 2000000000) Output 输出对a^b进行操作后得到的数字是什么
矩阵乘法
矩阵乘法
矩阵运算律 : 结合律:(AB)C=A(BC) 分配律:(A+B)C=AC+BC
C(A+B)=CA+CB
若A为m×s矩阵,B为s×n矩阵,则AB为 m×n矩阵 而BA无法进行矩阵乘法运算;即便是方阵( n×n)交换后乘得的结果也不一定相同,除 了相当特殊的,例如每个元素都是1的方阵
相关文档
最新文档