HDU 4549

水题: 费马小定理+快速幂+矩阵快速幂
(第一次用到费马小定理)
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL MOD = 1000000006;
const LL MOD1 = 1000000007;
struct Matrix
{
LL NUM[2][2];
Matrix operator + (const Matrix a) const
{
Matrix c;
for(int i = 0; i < 2; ++i)
{
for(int j = 0; j < 2; ++j)
{
c.NUM[i][j] = NUM[i][j] + a.NUM[i][j];
}
}
return c;
}
Matrix operator * (const Matrix a) const
{
Matrix c;
for(int i = 0; i < 2; ++i)
{
for(int j = 0; j < 2; ++j)
{
c.NUM[i][j] = 0;
for(int k = 0; k < 2; ++k)
c.NUM[i][j] = (c.NUM[i][j] + NUM[i][k] * a.NUM[k][j] % MOD) % MOD;
}
}
return c;
}
}; Matrix ppow(Matrix a, LL n)
{
Matrix ret;
for(int i =0 ; i< 2; ++i)
{
for(int j = 0; j < 2; ++j)
ret.NUM[i][j] = i==j ? 1 : 0;
}
while(n)
{
if(n & 1) ret = ret * a;
a = a * a;
n >>= 1;
}
return ret;
} LL Pow(LL a, LL n)
{
LL ret = 1;
while(n)
{
if(n & 1) ret =ret * a % MOD1;
a = a * a % MOD1;
n >>= 1;
}
return ret;
} int main()
{
LL a, b, n;
Matrix E;
E.NUM[0][0] = 1; E.NUM[0][1] = 1;
E.NUM[1][0] = 1; E.NUM[1][1] = 0;
while(cin >> a >> b >> n)
{
if(n == 0) cout << a << endl;
else if(n == 1) cout << b << endl;
else
{
n -= 1;
Matrix tmp = ppow(E,n);
LL na = tmp.NUM[0][1] , nb = tmp.NUM[0][0];
LL ans = (Pow(a,na) * Pow(b,nb))%MOD1;
cout << ans << endl;
}
}
return 0;
}
HDU 4549的更多相关文章
- 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 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: 题目是中文的很容易理解吧.可一开始我把题目看错了,这毛病哈哈. 一开始我看错题时,就用了一个快速 ...
- [HDU 4549] M斐波那契数列
M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Sub ...
- 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斐波拉契 (矩阵快速幂 + 费马小定理)
Problem DescriptionM斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = aF[1] = bF[n] = F[n-1] * F[n-2] ( n > 1 ) 现在 ...
- hdu 4549 矩阵快速幂
题意: M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = aF[1] = bF[n] = F[n-1] * F[n-2] ( n > 1 ) 现在给出a, b, n,你能求出F ...
- 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 ...
随机推荐
- 使用 CROSS APPLY 与 OUTER APPLY 连接查询
Ø 前言 日常开发中遇到多表查询时,首先会想到 INNER JOIN 或 LEFT OUTER JOIN 等等,但是这两种查询有时候不能满足需求.比如,左表一条关联右表多条记录时,我需要控制右表的某 ...
- Javaweb学习笔记——(十二)——————JSP指令:page指令、include指令、taglib指令,JavaBean,内省,EL表达式
JSP指令JSP指令分类 JSP有三大指令: *page指令 *include指令 *taglib指令 在JSP中没有任何指令是必须的. 但基本上每个JSP都是使用page指令============ ...
- Javaweb学习笔记——(十一)——————JSP、会话跟踪、Cookie、HttpSession
JSP1.什么是JSP jsp即java server pages,它是Javaweb的动态资源. jsp = html + java脚本 + jsp动态标签(包含EL表达式)2.JSP中java脚本 ...
- Tomcat下载,及环境变量配置
首先,介绍一下Tomcat: Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun 和其他一些公 ...
- zookeeper windows伪集群搭建
1.下载zookeeper http://mirror.bit.edu.cn/apache/zookeeper/ 解压后,目录重命名为zookeeper1,进入 conf目录,把zoo_sample. ...
- springboot使用jpa+mongodb时,xxxRepository不能Autowired的问题
springboot启动类: @SpringBootApplication public class MainApp { public static void main(String[] args) ...
- 2.4 if-else
if-else 想一想:在使用if的时候,它只能做到满足条件时要做的事情.那万一需要在不满足条件的时候,做某些事,该怎么办呢? 答:使用 if-else <1>if-else的使用格式 i ...
- 第28月第5天 uibutton交换方法
1. //交换系统的方法 @implementation UIControl (MYButton) + (void)load { Method a = class_getInstanceMethod( ...
- python网络编程初识
一,什么是计算机网络: 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和 [1] 信 ...
- LOJ#2127「HAOI2015」按位或
用$ Min-Max$容斥之后要推的东西少了好多 无耻的用实数快读抢了BZOJ.Luogu.LOJ三个$ OJ$的Rank 1 即将update:被STO TXC OTZ超了QAQ 题意:集合$ [0 ...