矩阵快速幂与快速幂模板 整理
来源:互联网 发布:日本人用的软件 编辑:程序博客网 时间:2024/06/05 15:59
快速幂和矩阵快速幂, 都是优化, 使时间复杂度在 log(N) 内, 对于 超大数 运算 极为有效
矩阵快速幂与快速幂 其核心思想一样, 只不过用矩阵表达;
模板如下:
快速幂:
typedef long long LL;LL fun(LL x,LL n,){ LL res=1; while(n>0) { if(n & 1) res=(res*x)%Max; x=(x*x)%Max; n >>= 1; } return res;}
矩阵快速幂:
struct Matrix{ll arr[N][N];void init(){memset(arr,0,sizeof(arr));for(int i=0;i<MAXN;i++)a[i][i]=1;//初始化}}A;Matrix mul(Matrix X,Matrix Y)// 矩阵乘法{Matrix ans;for(int i=0;i<MAXN;i++)for(int j=0;j<MAXN;j++){ans.arr[i][j]=0;for(int k=0;k<MAXN;k++)ans.arr[i][j]+=X.arr[i][k]*Y.arr[k][j];ans.arr[i][j]%=MOD;}return ans;}Matrix Q_pow(Matrix B,int n)// ¾ØÕó¿ìËÙÃÝ {Matrix ans;ans.init();while(n){if(n&1)ans=mul(ans,B);n>>=1;B=mul(B,B);}return ans;}Matrix Add(Matrix a,Matrix b) //(a+b)%mod 矩阵加法{ int i,j,k; Matrix ans; for(i=0;i<MAXN;i++) for(j=0;j<MAXN;j++) { ans.arr[i][j]=a.arr[i][j]+b.arr[i][j]; ans.arr[i][j]%=MOD; } return ans; } Matrix Sum(Matrix a,int n)// 矩阵和{int m;Matrix ans,pre;if(n==1) return ans;m=n/2;pre=Sum(a,m);ans=Add(pre,mul(pre,Q_pow(a,m)));if(n&1)ans=Add(ans,Q_pow(a,n));return ans;}
阅读全文
1 0
- 矩阵快速幂与快速幂模板 整理
- 矩阵快速幂模板
- 矩阵快速幂--模板
- 矩阵快速幂 模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 【矩阵快速幂模板】
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂【模板】
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 矩阵快速幂 【模板】
- 【整理】I/O复用模型中的 select、poll、epoll
- 采药
- mapdb实现分析
- 闲聊软件测试自动化(3): 我们期望什么样的测试自动化?
- maven出现 invalid LOC header (bad signature)的解决办法
- 矩阵快速幂与快速幂模板 整理
- Java的反射机制
- STM32的DAC+DMA双通道输出汉字,在示波器中显示汉字
- POJ 2763 Housewife Wind(树链剖分(边权))
- 激活函数
- 判断是否是微信浏览器
- Linux一些最基本命令
- 方唯上传程序后不能登录后台
- BinaryTree的构建和遍历,以及搜索删除(非完全二叉树,非平衡二叉树)