hdu-4549 求幂大法、矩阵快速幂、快速幂

题目

M斐波那契数列

Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 6217 Accepted Submission(s): 1902

Problem Description

M斐波那契数列F[n]是一种整数数列,它的定义如下:

F[0] = a

F[1] = b

F[n] = F[n-1] * F[n-2] ( n > 1 )

现在给出a, b, n,你能求出F[n]的值吗?

Input

输入包含多组测试数据;

每组数据占一行,包含3个整数a, b, n( 0 <= a, b, n <= 10^9 )

Output

对每组测试数据请输出一个整数F[n],由于F[n]可能很大,你只需输出F[n]对1000000007取模后的值即可,每组数据输出一行。

Sample Input

0 1 0
6 10 2

Sample Output

0
60

思路

列出F_n的前几项可以知道,指数是0,1开始的斐波那契数列

代码

#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <string>
#include <cstdio> using namespace std; typedef long long LL;
const int INF = 0x3f3f3f3f;
const int N = 5;
const int MOD = 1e9 + 7; struct M
{
LL m[2][2];
M(){memset(m, 0, sizeof(m));}
}; LL Eular(LL n)
{
LL ret = n;
for(int i = 2;i * i <= n;++i)
{
if(n % i == 0)
{
ret = ret - ret / i;
while(n % i == 0)
n /= i;
}
}
if(n > 1)
ret = ret - ret / n;
return ret;
} LL m = Eular(MOD); M mul(M a, M b)
{
M ret;
for(int i = 0;i < 2;++i)
for(int j = 0;j < 2;++j)
for(int k = 0;k < 2;++k)
ret.m[i][j] = (ret.m[i][j] + a.m[i][k] * b.m[k][j] % m) % m;//注意这里因为是幂,所以是模Eular(MOD)
return ret;
} M M_pow(M a, int b)
{
M ret;
ret.m[0][0] = 1, ret.m[1][1] = 1;
while(b)
{
if(b & 1)
ret = mul(ret, a);
a = mul(a, a);
b >>= 1;
}
return ret;
} LL q_pow(LL a, LL b)
{
LL ret = 1;
a %= MOD;
while(b)
{
if(b & 1)
ret = (ret * a) % MOD;
a = (a * a) % MOD;
b >>= 1;
}
return ret;
} int main()
{
LL a, b, n;
while(cin >> a >> b >> n)
{
if(!n)
{
cout << a % MOD << endl;
continue;
}
M f, k;
f.m[0][0] = 1;
k.m[0][0] = k.m[0][1] = k.m[1][0] = 1;
f = mul(f, M_pow(k, n - 1));
//cout << f.m[0][1] << " " << f.m[0][0] << endl;
cout << ((q_pow(a, f.m[0][1] % m) % MOD) * (q_pow(b, f.m[0][0] % m) % MOD)) % MOD << endl;
}
return 0;
}

求幂大法,矩阵快速幂,快速幂模板题--hdu4549的更多相关文章

  1. Luogu 3390 【模板】矩阵快速幂 (矩阵乘法,快速幂)

    Luogu 3390 [模板]矩阵快速幂 (矩阵乘法,快速幂) Description 给定n*n的矩阵A,求A^k Input 第一行,n,k 第2至n+1行,每行n个数,第i+1行第j个数表示矩阵 ...

  2. CH0101 a^b、 CH0102 64位整数乘法(快速幂、快速乘)【模板题】

    题目链接:传送门    //a^b   传送门    //64位整数乘法 题目: 描述 求 a 的 b 次方对 p 取模的值,其中 ≤a,b,p≤^ 输入格式 三个用空格隔开的整数a,b和p. 输出格 ...

  3. Luogu T7152 细胞(递推,矩阵乘法,快速幂)

    Luogu T7152 细胞(递推,矩阵乘法,快速幂) Description 小 X 在上完生物课后对细胞的分裂产生了浓厚的兴趣.于是他决定做实验并 观察细胞分裂的规律. 他选取了一种特别的细胞,每 ...

  4. 整数快速乘法/快速幂+矩阵快速幂+Strassen算法

    快速幂算法可以说是ACM一类竞赛中必不可少,并且也是非常基础的一类算法,鉴于我一直学的比较零散,所以今天用这个帖子总结一下 快速乘法通常有两类应用:一.整数的运算,计算(a*b) mod c  二.矩 ...

  5. 51nod 1113 矩阵快速幂( 矩阵快速幂经典模板 )

    1113 矩阵快速幂 链接:传送门 思路:经典矩阵快速幂,模板题,经典矩阵快速幂模板. /******************************************************* ...

  6. luoguP3390(矩阵快速幂模板题)

    链接:https://www.luogu.org/problemnew/show/P3390 题意:矩阵快速幂模板题,思路和快速幂一致,只需提供矩阵的乘法即可. AC代码: #include<c ...

  7. 【HDOJ5950】Recursive sequence(矩阵乘法,快速幂)

    题意:f[1]=a,f[2]=b,f[i]=2f[i-2]+f[i-1]+i^4(i>=3),多组询问求f[n]对2147493647取模 N,a,b < 2^31 思路:重点在于i^4的 ...

  8. hdu 5690 2016"百度之星" - 初赛(Astar Round2A) All X 快速二次幂 || 寻找周期

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5690 题意:m个数字全为x mod k ?= c;其中m <= 1010,0 < c,k ...

  9. [LOJ#162]模板题-快速幂2

    <题目链接> 注意:这可能也是一道模板题. 注意2:$p=998224352$ 注意3:对于$100\%$的数据,$n\leq 5 \times 10^6$ 这个题很启发思路,如果直接快速 ...

随机推荐

  1. Mybatis之是如何执行你的SQL的(SQL执行过程,参数解析过程,结果集封装过程)

    Myabtis的SQL的执行是通过SqlSession.默认的实现类是DefalutSqlSession.通过源码可以发现,selectOne最终会调用selectList这个方法. @Overrid ...

  2. CentOS 最新版的下载地址 + 版本选择详解

    CentOS 最新版的下载地址 + 版本选择详解 发现越来越多的机关单位.事业单位开始使用 Linux 作为主要服务器,毕竟,Linux的稳定性和高效性是众所周知的,所以我也打算把自己这一块技术加强一 ...

  3. NetLink通信机制学习

    Netlink套接字是用以实现用户进程与内核进程通信的一种特殊的进程间通信(IPC) ,在 Linux 2.4 版以后版本的内核中,几乎全部的中断过程与用户态进程的通信都是使用 netlink 套接字 ...

  4. pycharm控制台出现python编译器的编辑功能

    一.最近研究了下python,然后昨天发现新建项目后,出现如图的输入状况(Ctrl+Alt+F10) 二 二.更改方式 (1)点开如图位置,进入编辑模式 (2)将如图位置的√去掉就好了

  5. swift 学习之UISegmentedControl

    //创建分段控件的标题         let titileArray:[String] = ["点评", "哪里逃"]         let segment ...

  6. Deep learning for visual understanding: A review

    https://www.sciencedirect.com/science/article/pii/S0924271618301291?dgcid=raven_sd_recommender_email ...

  7. Android-HttpUtil工具类

    Http(Java 版 HttpURLConnection)请求的相关工具类 public class HttpUtil { private static final int TIMEOUT_IN_M ...

  8. Docker Warning : the backing xfs filesystem is formatted without d_type support

    CentOS7 下安装配置 Docker,遇到如下的WARNING, WARNING: overlay: the backing xfs filesystem is formatted without ...

  9. linux apache安装https证书

    1.首先查看是否安装apache 命令:rpm -qa|grep httpd 如果存在,卸载命令:rpm -e XXXX 如果不存在,安装命令:yum install httpd 安装完apache之 ...

  10. Linux Socket - UDP链接包

    LINUX UDP SOCKET 01 UDP号绑定会报错吗? 会的,提示Address is using,本地的没有区别 UDP不需要发起链接,不知道是不是连接成功 client的IP地址和端口号不 ...