hdu 4549 M斐波那契数列(费马小定理+矩阵快速幂)
来源:互联网 发布:郭斯特 知乎 编辑:程序博客网 时间:2024/05/17 04:48
http://acm.hdu.edu.cn/showproblem.php?pid=4549
F(n)=a^F(n-1)*b^F(n-2)%mod
因为a和b都与mod互素,因此用费马小定理可以得到
F(n)=a^(f(n-1)%mod-1)*b^(f(n)%mod-1) %mod
因此用一次矩阵快速幂和两次快速幂即可。
#include<iostream>using namespace std;typedef long long LL;#define mod1 1000000006struct mat{ LL a[2][2];};mat multi(mat x,mat y) //矩阵乘法 { mat z; for(int i=0;i<2;i++) for(int j=0;j<2;j++) { LL ans=0; for(int k=0;k<2;k++) ans=(ans+x.a[i][k]*y.a[k][j])%mod1; z.a[i][j]=ans%mod1; } return z;}mat mat_quickmod(LL n) //矩阵快速幂 { mat x,y; x.a[0][0]=x.a[1][1]=1,x.a[0][1]=x.a[1][0]=0; y.a[0][0]=0,y.a[0][1]=y.a[1][0]=y.a[1][1]=1; while(n) { if(n%2) x=multi(x,y); y=multi(y,y); n/=2; } return x;}LL quickmod(LL x,LL n,LL mod) //快速幂 { LL ans=1; while(n) { if(n%2) ans=ans*x%mod; x=x*x%mod; n/=2; } return ans;}int main(){ LL x,y,n,mod=1000000007; while(cin>>x>>y>>n) { mat k=mat_quickmod(n); LL ans=quickmod(x,k.a[0][0],mod)*quickmod(y,k.a[1][0],mod)%mod; cout<<ans<<endl; } return 0;}
阅读全文
0 0
- HDU 4549 M斐波那契数列(矩阵快速幂)(费马小定理)
- HDU - 4549 M斐波那契数列(矩阵快速幂+费马小定理)
- HDU 4549 M斐波那契数列(矩阵快速幂3)+费马小定理
- HDU 4549 M斐波那契数列(矩阵快速幂+费马小定理)
- HDU 4549 M斐波那契数列 (矩阵快速幂+费马小定理)
- hdu 4549 M斐波那契数列(费马小定理+矩阵快速幂)
- HDU 4549 M斐波那契数列(费马小定理,矩阵快速幂,快速幂)
- HDU 4549 M斐波那契数列 (费马小定理降幂&矩阵快速幂)
- HDU 4549M斐波那契数列(矩阵快速幂+费马小定理)
- HDU 4549 M斐波那契数列(矩阵快速幂&费马小定理)
- HDU --- 4549 M斐波那契数列 【费马小定理+矩阵快速幂】
- HDU 4549 M斐波那契数列 (矩阵快速幂 + 费马小定理)
- HDU 4549 M斐波那契数列 (费马小定理+矩阵快速幂)
- hdu 4549 M斐波那契数列(费马小定理 + 二分快速幂 + 矩阵快速幂)
- HDU——4549M斐波那契数列(矩阵快速幂+快速幂+费马小定理)
- 【费马小定理降幂+矩阵快速幂+快速幂】M斐波那契数列 HDU
- hdoj 4549 M斐波那契数列(费马小定理降幂,矩阵快速幂)
- HDOJ 题目4549 M斐波那契数列(数学,矩阵快速幂,费马小定理)
- JAVA实现MD5加密算法(使用MessageDigest)
- 缓存——redis和本地
- java 解析xml的四种方式:sax,dom,dom4j,jdom
- 图像处理实例--基于分水岭分割进行肺癌判断
- hadoop HA环境安装配置
- hdu 4549 M斐波那契数列(费马小定理+矩阵快速幂)
- 动态添加的标签如何调用js事件
- 做毕设(八)——阿里云
- PHPStorm远程管理FTP项目
- linux的进程基础
- 常用的ADB命令
- css中用list-style-type指定列表(lists)前面符号
- eventlet hub documents
- 从nginx-rtmp中提取一帧h264帧