hdu4549 M斐波那契数列 (矩阵快速幂+费马小定理)
来源:互联网 发布:淘宝上的xbox手柄 编辑:程序博客网 时间:2024/05/29 23:48
题目链接:
http://acm.split.hdu.edu.cn/showproblem.php?pid=4549
题目大意:
已知a,b,n,接下来求解第n项的值。
题目思路:
已知a和b的指数是按照斐波那契数列的顺序进行递增的,所以只要求出a,b的指数即可。
费马小定理:如果p为质数且a,p互质 a^(p-1) = 1(mod p)
所以 a^n = a^( n%(p-1) ) * 1 * 1...
A^n%p 这题的p是质素,而且A,p是互质的。
所以直接A^(n%(p-1)) %p
坑点:
在这里矩阵快速幂mod的是p-1所以你在快速幂里写的mod值要为p-1(这个地方没发现,一直傻傻的写着p,wa到死)。
碰到斐波那契要想到矩阵快速幂,遇到质数之类的求膜要想到费马欧拉等定理及引理。
代码:
#include <bits/stdc++.h>using namespace std;const int mo = 1000000007;const int size = 2;#define ll long longstruct matrix{ ll m[size][size];};matrix mul(matrix a,matrix b){ matrix c; memset(c.m,0,sizeof(c.m)); for(int i=0;i<size;i++) for(int j=0;j<size;j++) for(int k=0;k<size;k++) c.m[i][j] = ((a.m[i][k]*b.m[k][j])%(mo-1)+c.m[i][j])%(mo-1);//矩阵快速幂的模要搞清楚 return c;} matrix quick(matrix a,ll n){ matrix res; memset(res.m,0,sizeof(res.m)); for(int i=0;i<size;i++) res.m[i][i]=1; while(n){ if(n&1) res=mul(res,a); n>>=1; a=mul(a,a); } return res;}ll quickmo(ll a,ll b,ll p){ ll ans=1; ll tmp = a%p; while(b){ if(b&1) ans = ans*tmp%p; tmp = tmp*tmp%p; b>>=1; } return ans;}int main(){ matrix p; memset(p.m,0,sizeof(p.m)); p.m[0][1]=p.m[0][0]=p.m[1][0]=1; ll a,b,n; while(~scanf("%lld%lld%lld",&a,&b,&n)){ if(n==0) printf("%d\n",a); else if(n==1) printf("%lld\n",b); else if(n==2) printf("%lld\n",a*b%mo); else{ matrix ans = quick(p,n-3); ll z1 = (ans.m[0][0]*2+ans.m[0][1]*1)%(mo-1);//这里也要满足费马小定理的要求mo-1 ll z2 = (ans.m[1][0]*2+ans.m[1][1]*1)%(mo-1); ll ans1=quickmo(a%mo,z2,mo)%mo; ll ans2=quickmo(b%mo,z1,mo)%mo; printf("%lld\n",ans1*ans2%mo); } } }
阅读全文
0 0
- hdu4549——M斐波那契数列(费马小定理+矩阵快速幂)
- hdu4549 M斐波那契数列 (矩阵快速幂+费马小定理)
- hdu4549 M斐波那契数列(矩阵快速幂)
- HDU4549 M斐波那契数列【矩阵快速幂】
- 解题报告:HDU4549 M斐波那契数列 数论三大基础(快速幂+矩阵快速幂+费马小定理)
- M斐波那契数列(hdu4549矩阵二分幂+二分快速幂)
- hdu4549---M斐波那契数列(矩阵+欧拉定理)
- hdu4549 M斐波那契数列 【矩阵快速幂+快速幂+欧拉函数降次】
- 【费马小定理降幂+矩阵快速幂+快速幂】M斐波那契数列 HDU
- hdoj 4549 M斐波那契数列 【矩阵快速幂 + 费马小定理 + 快速幂】
- HDU 4549 M斐波那契数列(费马小定理,矩阵快速幂,快速幂)
- HDU4549 M斐波那契数列
- hdu4549 M斐波那契数列
- HDU 4549 M斐波那契数列 (费马小定理降幂&矩阵快速幂)
- hdoj 4549 M斐波那契数列(费马小定理降幂,矩阵快速幂)
- HDU 4549M斐波那契数列(矩阵快速幂+费马小定理)
- HDOJ 题目4549 M斐波那契数列(数学,矩阵快速幂,费马小定理)
- HDU - 4549 M斐波那契数列(矩阵快速幂+费马小定理)
- Python学习笔记(六)
- sql之left join、right join、inner join的区别
- apache配置相关
- S3C2440 块设备(待续)
- SVN的使用
- hdu4549 M斐波那契数列 (矩阵快速幂+费马小定理)
- 数据结构——循环队列(顺序队列)模板类实现
- springmvc常用注解标签详解。
- py-faster-rcnn运行实例部分问题
- android 高级之旅 (十六) Android 数据库操作中的cursor错误!
- 初识大数据Hadoop
- 模板&泛型编程
- Struts2中web.xml配置出错 ClassNotFoundException: org.apache.struts2.dispatcher.FilterDispatahcer
- android 相机相册选取图片赋给ImageView