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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 做题做的烦躁了怎么办 英语不会做题怎么办 孩子审题不细心怎么办 生孩子有恐惧症怎么办 小孩不喜欢上幼儿园怎么办 小孩不喜欢去幼儿园怎么办 小孩不喜欢学生字怎么办 学生不喜欢补课老师怎么办 小孩不喜欢上学逃课怎么办 一年级小朋友不爱写字怎么办 幼儿园小朋友不爱写字怎么办 孩子懒散不积极怎么办 孩子不肯上幼儿园怎么办 孩子不肯去幼儿园怎么办 小孩记不住字怎么办 小孩不会写字要怎么办 一年级孩子不爱写字怎么办 一年级小孩不爱写字怎么办 孩子不爱写字怎么办呢 幼儿园孩子不爱写字怎么办 孩子上学没学籍怎么办 孩子上学务工证怎么办 孩子上学被欺负怎么办 孩子害怕上幼儿园怎么办 孩子写字肩膀疼怎么办 5岁不会写字怎么办 上中班不爱写字怎么办 孩子性子太慢怎么办 13小孩特别懒怎么办 小孩不肯上幼儿园怎么办 宝宝不肯上幼儿园怎么办 宝宝不肯去幼儿园怎么办 小孩子不肯去幼儿园怎么办 上幼儿园不说话怎么办 小孩写字不认真怎么办 游戏打开是乱码怎么办 小孩不写字该怎么办 小孩不喜欢穿袜子怎么办 宝宝不喜欢穿袜子怎么办 看到婆婆就烦怎么办 什么也不想吃怎么办