HDU 4549 M斐波那契数列(矩阵快速幂+费马小定理)

匿名 (未验证) 提交于 2019-12-02 23:26:52
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37868325/article/details/88849825

题意:







现在给出a, b, n,你能求出F[n]的值吗?

Input


每组数据占一行,包含3个整数a, b, n( 0 <= a, b, n <= 10^9 )

Output

对每组测试数据请输出一个整数F[n],由于F[n]可能很大,你只需输出F[n]对1000000007取模后的值即可,每组数据输出一行。

Sample Input

 0 1 0 6 10 2

Sample Output

 0 60

,很容易推出。

,求出ab的指数后,在快速幂就可以了

代码:

 #include<bits/stdc++.h> using namespace std; typedef long long ll; #define maxn 10 #define mod 1000000007  ///n行m列的矩阵 struct AA {     ll n,m,a[maxn][maxn];     void mem1()     {         memset(a,0,sizeof(a));///n=m时,初始化为单位阵         for(int i=0;i<n;i++)             a[i][i]=1;     } };  ///n行m列的aa矩阵 * m行k列的bb矩阵 AA mul(AA aa,AA bb,int n,int m,int kk) {     AA cc;     cc.n=cc.m=2;     for(int i=0;i<n;i++)     {         for(int j=0;j<kk;j++)         {             int x=0;             for(int k=0;k<m;k++)             {                 x+=(aa.a[i][k]*bb.a[k][j])%(mod-1);                 x%=(mod-1);             }             cc.a[i][j]=x;         }     }     return cc; }  ///方阵aa的m次方 AA POW(AA aa,ll m) {     AA d;d.n=d.m=2;     d.mem1();     while(m)     {         if(m&1)         {             d=mul(d,aa,2,2,2);         }         m/=2;         aa=mul(aa,aa,2,2,2);     }     return d; } ll pp(ll i,ll j) {     ll zz=1;     while(j)     {         if(j&1) {zz*=i;zz%=mod;}         j/=2;         i*=i;         i%=mod;     }     return zz; } ll n,a,b,x,y; int main() {     while(~scanf("%lld%lld%lld",&a,&b,&n))     {         if(n==0)         {             printf("%lld\n",a%mod);         }         else if(n==1)         {             printf("%lld\n",b%mod);         }         else         {             AA aa,bb;aa.n=aa.m=2;             aa.a[0][0]=1;aa.a[0][1]=1;             aa.a[1][0]=1;aa.a[1][1]=0;             AA cc=POW(aa,n-1);             bb.a[0][0]=1;             bb.a[1][0]=0;             cc=mul(cc,bb,2,2,1);             printf("%lld\n",(pp(a,cc.a[1][0])*pp(b,cc.a[0][0]))%mod);         }     } } 

文章来源: https://blog.csdn.net/qq_37868325/article/details/88849825
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!