HDOJ 4549 - M斐波那契数列 费马小定理,矩阵乘法
2013-06-02 16:54
197 查看
矩阵乘法求线性关系的数列...而本数列不是线性关系..无法对F(n)构造矩阵直接用矩阵乘法解决...
不难发现若取log F(n)...则log F(n) = log F(n-1) + log F(n-2)....可以转化成线性关系...
引入一个非常重要的定理....费马小定理...描述: 假如p是质数,且(a,p)=1,那么 a^(p-1) ≡1(mod p)
本题要注意..提供的1000000007就是质数...且底数a,b,都不会大于等于p...也就是(a,p)与(b,p)恒为1...
联系费马小定里那么有对于任意的 a^k %m=a^(k%(m-1)) %m
推出这个结论..本题就可以通过进行多次矩阵乘法来解决了...
Program:
不难发现若取log F(n)...则log F(n) = log F(n-1) + log F(n-2)....可以转化成线性关系...
引入一个非常重要的定理....费马小定理...描述: 假如p是质数,且(a,p)=1,那么 a^(p-1) ≡1(mod p)
本题要注意..提供的1000000007就是质数...且底数a,b,都不会大于等于p...也就是(a,p)与(b,p)恒为1...
联系费马小定里那么有对于任意的 a^k %m=a^(k%(m-1)) %m
推出这个结论..本题就可以通过进行多次矩阵乘法来解决了...
Program:
#include<iostream> #include<stdio.h> #include<cmath> #include<string.h> #include<algorithm> #include<queue> #include<stack> #define ll long long #define oo 1000000007 #define MAXN 1005 using namespace std; struct node { ll s[2][2]; }p; node mul(node a,node b) { int i,j,k; node h; memset(h.s,0,sizeof(h.s)); for (k=0;k<2;k++) for (i=0;i<2;i++) for (j=0;j<2;j++) h.s[i][j]=(h.s[i][j]+a.s[i][k]*b.s[k][j])%(oo-1); return h; } ll Fibonacci(int n) { node h; h.s[0][0]=h.s[1][1]=1; h.s[0][1]=h.s[1][0]=0; p.s[0][0]=0; p.s[0][1]=p.s[1][0]=p.s[1][1]=1; int i; for (i=0;i<=30;i++) { if (n & 1<<i) h=mul(h,p); p=mul(p,p); } return h.s[1][0]; } ll getdata(ll a,ll n) { int i; ll p=a,k=1; for (i=0;i<=30;i++) { if (n & 1<<i) k=(k*p)%oo; p=(p*p)%oo; } return k; } ll getans(ll a,ll b,ll n) { if (n==0) return a; if (n==1) return b; a=getdata(a,Fibonacci(n-1)); b=getdata(b,Fibonacci(n)); return a*b%oo; } int main() { ll a,b,n; while (~scanf("%I64d%I64d%I64d",&a,&b,&n)) { printf("%I64d\n",getans(a,b,n)); } return 0; }
相关文章推荐
- hdoj 4549 M斐波那契数列(费马小定理降幂,矩阵快速幂)
- HDOJ - 2371 矩阵乘法
- hdoj 4549 M斐波那契数列 【矩阵快速幂 + 费马小定理 + 快速幂】
- hdu 4549 M斐波那契数列(矩阵乘法+降幂公式)
- HDOJ 题目4549 M斐波那契数列(数学,矩阵快速幂,费马小定理)
- HDOJ-1757A Simple Math Problem(矩阵乘法快速幂)
- hdoj 3521 An easy Problem(矩阵乘法)
- HDOJ 4549 M斐波那契数列(矩阵快速幂 + 费马小定理)
- HDOJ 4602 - Partition 打表找公式,然后矩阵乘法解决..
- 【HDOJ5950】Recursive sequence(矩阵乘法,快速幂)
- HDOJ M斐波那契数列 4549【矩阵快速幂+快速幂+费马小定理+欧拉函数】
- 【矩阵乘法】hdu hdoj 1757 A Simple Math Problem
- 算法导论之四矩阵乘法的Strassen算法
- 矩阵乘法
- 矩阵向量乘法与线性变换
- 小白进阶之矩阵乘法
- [BZOJ2738]矩阵乘法 整体二分+二维树状数组
- 矩阵乘法
- 基于Strassen算法采用分治的矩阵乘法cpp实现
- HDU 4920(Matrix multiplication-矩阵乘法优化)