快速幂及矩阵
来源:互联网 发布:中科院软件研究所待遇 编辑:程序博客网 时间:2024/06/12 01:36
快速幂及矩阵
基础快速幂
#include<cstdio>#include<iostream>using namespace std;typedef long long ll;int qpow(int a,int b,int mod){ int res=1; for(ll i=1;i<=b;i<<=1,a=((ll)a*a)%mod) if(i&b)res=((ll)res*a)%mod; return res;}int main(){ ll b, p, k; cin>>b>>p>>k; cout<<b<<"^"<<p<<" mod "<<k<<"="<<qpow(b,p,k); return 0;}
矩阵快速幂
#include<iostream>#include<cstdio>using namespace std;const int P=1e9+7; typedef long long ll;struct matrix{ int s[2][2];};matrix mul(matrix a, matrix b){ matrix ans; int i,j,k; for(i = 0; i < 2; i ++) for(j = 0; j < 2; j ++) for(k = 0; k < 2; k ++) ans.s[i][j]=((ll)ans.s[i][j] + (ll)(a.s[i][k] * b.s[k][j]) % P) % P; return ans;}matrix power(matrix a, int n){ matrix im;//单位矩阵 im.s[0][0] = im.s[1][1] = 1; im.s[1][0] = im.s[0][1] = 0; matrix b = a; for(int i = 1; i <= n; i <<= 1, b = mul(b, b)) if(n & i) im = mul(im, b); return im;}
应用:求斐波那契数列
int F(int n){ if (n == 0) return 1 % P; else if(n == 1) return 1 % P; else { matrix a; a.s[0][0] = a.s[0][1] = a.s[1][0] = 1; a.s[1][1] = 0; a = power(a, n - 2); int f = (long long) (a.s[0][0] + a.s[0][1]) % P; return f; }}int main(){ int n; scanf("%d", & n); cout << F(n) << endl; return 0;}
0 0
- 快速幂及矩阵
- 矩阵运算及 快速幂求矩阵
- 快速幂算法及矩阵快速幂
- 模板--快速幂及矩阵快速幂
- 矩阵的快速幂及应用
- 快速幂及矩阵应用(学习)
- 快速幂 矩阵快速幂思想详解及例题
- 快速矩阵快速幂
- 转移矩阵+矩阵快速幂
- 矩阵乘法 矩阵快速幂
- 构造矩阵+矩阵快速幂
- POJ 3150 Cellular Automaton --矩阵快速幂及优化
- 矩阵快速幂,矩阵加法,矩阵乘法
- 快速幂||矩阵快速幂
- 快速幂&矩阵快速幂
- 快速幂,矩阵快速幂
- 快速幂 矩阵快速幂
- 快速幂&矩阵快速幂
- 编程珠玑: 13章 搜索 13.1生成[0 ,maxval]范围内m各随机整数的有序序列 -------解题总结
- SpringMvc+Quartz执行多次的处理
- [Shell]一个特好用的查找命令 find + grep
- 深入理解Java内存模型
- Hive分组统计前top N条记录
- 快速幂及矩阵
- java 异常抛不抛出的影响
- 关于BSP,BIOS,和bootloader区别
- JAVA移位运算与进制转换
- 历届国际信息奥林匹克地址与结果
- 一创建和销毁对象
- Ajax 完整教程-(一)
- javascript 学习指南--语法
- RestEasy 调用Rest接口使用详解