水题: 费马小定理+快速幂+矩阵快速幂

(第一次用到费马小定理)

#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的更多相关文章

  1. 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]. 思路:手算一下可以发现 ...

  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... ...

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

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4549: 题目是中文的很容易理解吧.可一开始我把题目看错了,这毛病哈哈. 一开始我看错题时,就用了一个快速 ...

  4. [HDU 4549] M斐波那契数列

    M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Sub ...

  5. 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)} ...

  6. hdu 4549 M斐波拉契 (矩阵快速幂 + 费马小定理)

    Problem DescriptionM斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = aF[1] = bF[n] = F[n-1] * F[n-2] ( n > 1 ) 现在 ...

  7. hdu 4549 矩阵快速幂

    题意: M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = aF[1] = bF[n] = F[n-1] * F[n-2] ( n > 1 ) 现在给出a, b, n,你能求出F ...

  8. hdu 4549 M斐波那契数列 矩阵快速幂+欧拉定理

    M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Problem ...

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

    M斐波那契数列 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submi ...

随机推荐

  1. Eclipse使用Maven搭建Java Web项目,并直接部署Tomcat

    1.环境: win10 Java 1.8 Maven 3.3.9 Eclipse IDE for Java EE Developers 2.准备: eclipse环境什么的不赘述,Maven环境还是要 ...

  2. vue实现简单日历

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. Android上禁止屏幕旋转

    看网上讲了很多,设置很多属性,设置了很多,其实最关键的一点是这个 @Overrideprotected void onResume() { /** * 设置为横屏 */ if(getRequested ...

  4. 【十】虚拟机工具 03 - jinfo命令使用

      guchunchaodeMacBook-Air:workspaces guchunchao$ jinfo Usage: jinfo [option] <pid> (to connect ...

  5. oracle 对现有的表进行列表分区

    create tablespace pur120000 datafile 'D:\orcldata\pur120000.dbf' size 1024m reuse autoextend on next ...

  6. luogu P4099 [HEOI2013]SAO

    传送门 吐槽题目标题 这个依赖关系是个树,可以考虑树型dp,设f_i表示子树i的答案 因为这是个序列问题,是要考虑某个数的位置的,所以设\(f_{i,j}\)表示子树i构成的序列,i在第j个位置的方案 ...

  7. python中时间的转换和使用datetime

    模块 一个完整大型的python程序是由模块和包的形式组织起来的,可见模块在python中的重要性.模块是一种组织型式,它许多有关联(关系)的代码组织放到单独的独立文件中.简单的说,可以把模块理解为一 ...

  8. ES6走一波 module

    ES6模块设计思想:  尽量静态化,使得编译时就能确定模块的依赖关系,输入.输出的变量.可做静态优化. ES6模块不是对象,而是通过export命令显示指定输出的代码,再通过import命令输入 ex ...

  9. java并发基础

    一.创建线程 1.使用Executor:java.util.concurrent包中的执行器(Execute)为你管理Thread对象,从而简化并发编程. package thread; import ...

  10. 再测简单的JSP---JSP和Serlet的关系

    <Java Web入门经典.pdf>中第3章 末尾:, 创建一个web动态项目SqlServerTest,创建一个JSP文件index.jsp ,启动服务器 浏览器输入  http://l ...