HDU 4549M斐波那契数列 矩阵快速幂加费马小定理
来源:互联网 发布:2016怎么躲过淘宝排查 编辑:程序博客网 时间:2024/06/05 18:11
F[0] = a
F[1] = b
F[1] = b
F[n] = F[n-1] * F[n-2] ( n > 1 )
求F[n]%1e9+7
因为 每次相乘的矩阵为 0 1 1 1 为了防止求F(n)时溢出,要对矩阵元素取模,即 a[i][j] %= 1000000006。模数之所以为1000000006是因为根据费马小定理可得A^euler(M) = 1 (mod M),其中M为素数。 所以A^N = A^(N % euler(M))(mod M),而1000000007为素数,euler(1000000007)= 1000000006,所以模数是1000000006。 求出F(n-1)和F(n)以后,用二分快速幂求出pow(a,F(n-1))* pow(b,F(n))% 1000000007 就是最后的答案。
ACcode:
#include<bits/stdc++.h>using namespace std;#define ll long long#define mod 1000000007struct Matrix{ ll mat[2][2]; void init (){ memset(mat,0,sizeof(mat)); }};Matrix mul(Matrix a,Matrix b){ Matrix ret; ret.init(); for(int i=0;i<2;++i) for(int j=0;j<2;++j) for(int k=0;k<2;++k) ret.mat[i][j]=(ret.mat[i][j]+a.mat[i][k]*b.mat[k][j]%(mod-1))%(mod-1); return ret;}Matrix pow(Matrix a,ll n){ Matrix ret; ret.init(); for(int i=0;i<2;++i)ret.mat[i][i]=1; while(n){ if(n&1)ret=mul(ret,a); a=mul(a,a); n>>=1; } return ret;}ll poww(ll a, ll b){ int ret=1; while(b){ if(b&1)ret=(ret*a)%mod; a=(a*a)%mod; b>>=1; } return ret;}int main(){ ll a,b,n; while(cin>>a>>b>>n){ if(n==1){ printf("%I64d\n",b%mod); continue; } Matrix tmp; tmp.init(); tmp.mat[0][0]=0; tmp.mat[0][1]=1; tmp.mat[1][0]=1; tmp.mat[1][1]=1; tmp=pow(tmp,n); printf("%I64d\n",poww(a,tmp.mat[0][0])*poww(b,tmp.mat[1][0])%mod); } return 0;}/*6 10 16 10 26 10 36 10 46 10 56 10 66 10 76 10 86 10 96 10 106 7 34 3 93 2 3*/
0 0
- HDU 4549M斐波那契数列 矩阵快速幂加费马小定理
- HDU 4549 M斐波那契数列(费马小定理,矩阵快速幂,快速幂)
- HDU 4549M斐波那契数列(矩阵快速幂+费马小定理)
- HDU 4549 M斐波那契数列 (费马小定理降幂&矩阵快速幂)
- 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 4549 M斐波那契数列 (矩阵快速幂 + 费马小定理)
- HDU 4549 M斐波那契数列 (费马小定理+矩阵快速幂)
- hdu 4549 M斐波那契数列(费马小定理+矩阵快速幂)
- 【费马小定理降幂+矩阵快速幂+快速幂】M斐波那契数列 HDU
- hdu 4549 M斐波那契数列(费马小定理 + 二分快速幂 + 矩阵快速幂)
- HDU——4549M斐波那契数列(矩阵快速幂+快速幂+费马小定理)
- JSP开发前准备
- Stream 和 byte[] 之间的转换
- 统计学习-逻辑回归(LR)和最大熵模型
- 阿里云服务器mysql安装
- HDU 5867 Water problem (模拟水题)
- HDU 4549M斐波那契数列 矩阵快速幂加费马小定理
- spring+ajax+spring mvc+mybatis验证用户名是否存在
- 天线基础知识
- 设计模式复习笔记 (2)创建型模式:简单工厂模式
- 轮播,缩略图
- 教你如何正确屏蔽掉WPS弹窗广告
- 如何判断IP地址是A类B类还是C类
- GC(1.安全点的相关知识)
- 树状数组模板