hdu 4549 M斐波那契数列
来源:互联网 发布:ajax返回数据带双引号 编辑:程序博客网 时间:2024/06/08 04:56
题意:
f[0]=a;
f[1]=b;
f[i]=f[i-1]*f[i-2];
给出a,b,n;
求f[n];
思路:
f[0]=a^1 b^0
f[1]=a^0 b^1
f[2]=a^1 b^1
f[3]=a^1 b^2
f[4]=a^2 b^3
f[5]=a^3 b^5
可以看到
a,b的指数是斐波那契数列
也就是先求得a,b的指数再求 (a^n * b^m )%1000000007
这里我们知道n,m可能很大要取模
n,m对谁取模会导致答案不变呢?
我们想到了费马小定理,因为1000000007是质数,所以有 x^1000000006=1(mod1000000007)
PS:如果不是质数要求一下欧拉函数
#include<bits/stdc++.h>#define N 1000000007#define NN 1000000006#define M 2struct node{long long a[M][M];};node cheng(node a,node b){node c;memset(c.a,0,sizeof(c.a));for(int i=0;i<M;i++)for(int j=0;j<M;j++)for(int k=0;k<M;k++)c.a[i][j]=(c.a[i][j]+(a.a[i][k]*b.a[k][j])%NN)%NN;return c;}long long f(long long a,long long b){long long ans=1;while(b){if(b&1) ans=(ans*a)%N;a=(a*a)%N;b>>=1;}return ans;}const node A={{1,1, 0,0} }, B={ {1,1, 1,0 } } ;int main(){int a,b,n;node x,y;while(~scanf("%d%d%d",&a,&b,&n)){a%=N;b%=N;if(n==0) printf("%d\n",a);else if(n==1) printf("%d\n",b);else{x=A;y=B;n-=2;while(n){if(n&1)x=cheng(x,y);y=cheng(y,y);n>>=1;}printf("%lld\n",((f(b,x.a[0][0]%NN)*f(a,x.a[0][1]%NN))%N+N)%N);}}}
阅读全文
0 0
- M斐波那契数列 HDU
- hdu 4549 M斐波那契数列
- hdu 4549 M斐波那契数列
- M斐波那契数列 hdu 4549
- HDU 4549 M斐波那契数列
- hdu 4549 M斐波那契数列
- hdu 4549 M斐波那契数列 数论 矩阵
- hdu 4549——M斐波那契数列
- hdu-4549 M斐波那契数列 && nyoj - 1000
- HDU 4549 M斐波那契数列
- HDU 4549 M斐波那契数列
- M斐波那契数列 - HDU 4549 费马小定理
- hdu 4549 M斐波那契数列
- HDU 4549 M斐波那契数列
- hdu 4549 M斐波那契数列
- HDU 4549 M斐波那契数列
- hdu 4549 M斐波那契数列
- 4549 M斐波那契数列
- js正则表达式
- oa系统里面用的jbpm报org.hibernate.NonUniqueResultException: query did not return a unique result: 4
- 谈下自己的认识只掌握一门语言
- java-spring个人总结(一) 简述概念_入门
- 抽象工厂(Abstract Factory)
- hdu 4549 M斐波那契数列
- Hadoop海量数据处理 技术详解与项目实战 PDF电子书下载 带书签目录 完整版
- hdu 5933 贪心 思路 水题
- JDBC requires that the JdbcType must be specified for all nullable parameters
- memcache-client-for java下载安装及使用
- ubuntu java 配置
- 程序设计方法和程序分析
- Android 拼接多张图片(拖拽,缩放)
- 嵌入式系统学习——x86-qtopia添加应用