[HDU 4549] M斐波那契数列
M斐波那契数列
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 1609 Accepted Submission(s): 460
F[0] = a
F[1] = b
F[n] = F[n-1] * F[n-2] ( n > 1 )
现在给出a, b, n,你能求出F[n]的值吗?
每组数据占一行,包含3个整数a, b, n( 0 <= a, b, n <= 10^9 )
6 10 2
60
F(n)=F(n-1)*F(n-2)
F(1)=a;
F(2)=b;
F(3)=a^1*b^1
F(4)=a^1*b^2
F(5)=a^2*b^3
F(6)=a^3*b^5
F(n)=a^f(n'-1)*b^f(n'), f(n')为斐波拉契数列
这样就可以先算出F(n)对应f(n')、f(n'-1),再二分快速幂,F(n)=a^f(n'-1)%MOD*b^f(n')%MOD
另外由于n比较大且MOD为质数,则根据费马小定理得:F(n)=a^(f(n'-1)%(MOD-1)%MOD) * b^(f(n')%(MOD-1))%MOD
注意这里n'和n不一样,当n为3时,f(n')=1,不妨让n'=n-2...
#include <iostream>
#include <cstdio>
using namespace std;
#define MOD 1000000007
#define ll __int64
#define N 2 ll quickadd(ll a,ll b) //矩阵快速加,防溢出,其实可以不用这个
{
ll ret=;
while(b)
{
if(b&)
{
ret+=a;
if(ret>=MOD) ret-=MOD;
}
a<<=;
if(a>=MOD) a-=MOD;
b>>=;
}
return ret;
}
ll quickpow(ll a,ll b) //矩阵快速幂
{
ll ret=;
while(b)
{
if (b&) ret=quickadd(a,ret);
a=quickadd(a,a);
b>>=;
}
return ret;
}
void mul(ll a[N][N],ll b[N][N]) //矩阵相乘
{
ll i,j,k;
ll c[N][N]={};
for(i=;i<N;i++)
{
for(j=;j<N;j++)
{
for(k=;k<N;k++)
{
c[i][j]=(c[i][j]+a[i][k]*b[k][j])%(MOD-);
}
}
}
for(i=;i<N;i++)
{
for(j=;j<N;j++)
{
a[i][j]=c[i][j];
}
}
}
int main()
{
ll A,B,n;
while(scanf("%I64d%I64d%I64d",&A,&B,&n)!=EOF)
{
if(n==) printf("%I64d\n",A%MOD);
else if(n==) printf("%I64d\n",B%MOD); //特判0,1
else
{
n-=;
ll a[N][N]={,},b[N][N]={,,,};
while(n)
{
if(n&)mul(a,b);
mul(b,b);
n>>=;
}
ll k1=a[][];
ll k2=a[][];
ll ans=;
ans=ans*quickpow(A,k1)%MOD;
ans=ans*quickpow(B,k2)%MOD;
printf("%I64d\n",ans);
}
}
return ;
}
[HDU 4549] M斐波那契数列的更多相关文章
- hdu 4549 M斐波那契数列(快速幂 矩阵快速幂 费马小定理)
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4549: 题目是中文的很容易理解吧.可一开始我把题目看错了,这毛病哈哈. 一开始我看错题时,就用了一个快速 ...
- HDU 4549 M斐波那契数列(矩阵快速幂)
题目链接:M斐波那契数列 题意:$F[0]=a,F[1]=b,F[n]=F[n-1]*F[n-2]$.给定$a,b,n$,求$F[n]$. 题解:暴力打表后发现$ F[n]=a^{fib(n-1)} ...
- hdu 4549 M斐波那契数列 矩阵快速幂+欧拉定理
M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Problem ...
- HDU 4549 M斐波那契数列(矩阵快速幂+费马小定理)
M斐波那契数列 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Submi ...
- hdu 4549 M斐波那契数列(矩阵高速幂,高速幂降幂)
http://acm.hdu.edu.cn/showproblem.php?pid=4549 f[0] = a^1*b^0%p,f[1] = a^0*b^1%p,f[2] = a^1*b^1%p... ...
- HDU 4549 M斐波那契数列(矩阵幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4549 题意:F[0]=a,F[1]=b,F[n]=F[n-1]*F[n-2]. 思路:手算一下可以发现 ...
- HDU 1316 (斐波那契数列,大数相加,大数比较大小)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1316 Recall the definition of the Fibonacci numbers: ...
- HDU 5451 广义斐波那契数列
这道题目可以先转化: 令f(1) = 5+2√6 f(2) = f(1)*(5+2√6) ... f(n) = f(n-1)*(5+2√6) f(n) = f(n-1)*(10-(5-2√6)) = ...
- hdu 4549 M斐波拉契 (矩阵快速幂 + 费马小定理)
Problem DescriptionM斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = aF[1] = bF[n] = F[n-1] * F[n-2] ( n > 1 ) 现在 ...
随机推荐
- mysql学习笔记6——用phpmyadmin和在腾讯微云中创建数据库
安装phpmyadmin就不多说了,对于新手,推荐使用wamp(windows系统),傻瓜式安装,很好用.安装完后在浏览器栏输入localhost
- 九度OJ 1214 寻找丑数【算法】
题目地址:http://ac.jobdu.com/problem.php?pid=1214 题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因 ...
- java中instanceof和getClass()的作用
初学者难免有点混淆java中instanceof和getClass()的作用, 下面就来一一讲解. 父类A: class A { } 子类B: class B extends A { } 构造对象 ...
- 细说 ASP.NET Cache 及其高级用法
许多做过程序性能优化的人,或者关注过程程序性能的人,应该都使用过各类缓存技术. 而我今天所说的Cache是专指ASP.NET的Cache,我们可以使用HttpRuntime.Cache访问到的那个Ca ...
- 转 修改oracle用户密码永不过期
1.查看用户的proifle是哪个,一般是default: sql>SELECT username,PROFILE FROM dba_users; 2.查看指定概要文件(如default)的 ...
- NetBeans中文乱码解决办法
一.Windows下NetBeans中文乱码解决办法 找到你的Netbeans安装目录下的etc文件夹,用记事本打开netbeans.conf,找到netbeans_default_options(不 ...
- Hadoop NameNode is not formatted.
2014-08-26 20:27:22,712 WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Encountered except ...
- 解决在构造函数中使用Session,Session为null的问题
问题描述: public abstract class PageBase : System.Web.UI.Page 在PageBase中如何使用Session??? 我直接用 Session[&quo ...
- bzoj 4127: Abs 树链剖分
4127: Abs Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 11 Solved: 5[Submit][Status][Discuss] Des ...
- BZOJ 3992 [SDOI 2015] 序列统计 解题报告
这个题最暴力的搞法就是这样的: 设 $Dp[i][j]$ 为前 $i$ 个数乘积为 $j$ 的方案数. 转移的话就不多说了哈... 当前复杂度 $O(nm^2)$ 注意到,$M$ 是个质数,就说明 $ ...