hdu 5667 BestCoder Round #80 矩阵快速幂
Sequence
\ \ \ \ Holion August will eat every thing he has found.
\ \ \ \ Now there are many foods,but he does not want to eat all of them at once,so he find a sequence.
f_n=\left{\begin{matrix} 1 ,&n=1 \ a^b,&n=2 \ a^bf_{n-1}^cf_{n-2},&otherwise \end{matrix}\right.fn=⎩⎨⎧1,ab,abfn−1cfn−2,n=1n=2otherwise
\ \ \ \ He gives you 5 numbers n,a,b,c,p,and he will eat f_nfn foods.But there are only p foods,so you should tell him f_nfn mod p.
\ \ \ \ The first line has a number,T,means testcase.
\ \ \ \ Each testcase has 5 numbers,including n,a,b,c,p in a line.
\ \ \ \ 1\le T \le 10,1\le n\le 10^{18},1\le a,b,c\le 10^9 1≤T≤10,1≤n≤1018,1≤a,b,c≤109,pp is a prime number,and p\le 10^9+7p≤109+7.
\ \ \ \ Output one number for each case,which is f_nfn mod p.
- 1
- 5 3 3 3 233
- 190
- /*
- hdu 5667 BestCoder Round #80 矩阵快速幂
- F[n] = 1 (n == 1)
- F[n] = a^b (n == 2)
- F[n] = a^b * F[n-1]^c *F [n-2]
- 最开始试了下化简公式,但是无果. 也从矩阵快速幂上面考虑过(毕竟 F[n]与 F[n-1],F[n-2]有关)
- 但是发现是 乘法运算不知道怎么弄了(2b了)
- 能够发现运算时基于a的次方的,当a的次方相乘时就变成了他们的次方相加 (好气 TAT)
- 于是乎 a^g[n] = a^(b + c*g[n-1] * g[n-2])
- 然后用类似快速幂求斐波那契数的方法即可
- F[n] F[n-1] 1 C 1 0
- F[n-1] F[n-2] 1 * 1 0 0
- b 0 1
- hhh-2016-04-18 20:36:40
- */
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <vector>
- #include <map>
- #include <algorithm>
- #include <functional>
- #include <math.h>
- using namespace std;
- #define lson (i<<1)
- #define rson ((i<<1)|1)
- typedef long long ll;
- const int maxn = ;
- struct Matrix
- {
- ll ma[][];
- Matrix()
- {
- memset(ma,,sizeof(ma));
- }
- };
- Matrix mult(Matrix ta,Matrix tb, ll mod)
- {
- Matrix tc;
- for(int i = ; i < ; i++)
- {
- for(int j = ; j < ; j++)
- {
- tc.ma[i][j] = ;
- for(int k = ; k < ; k++){
- tc.ma[i][j] += (ta.ma[i][k] * tb.ma[k][j])%mod;
- tc.ma[i][j] %= mod;
- }
- }
- }
- return tc;
- }
- Matrix Mat_pow(Matrix ta,ll n,ll mod)
- {
- Matrix t;
- for(int i = ; i < ; i++)
- t.ma[i][i] = ;
- while(n)
- {
- if(n & ) t = mult(t,ta,mod);
- ta = mult(ta,ta,mod);
- n >>= ;
- }
- return t;
- }
- ll pow_mod(ll a,ll n,ll mod)
- {
- ll t = ;
- a %= mod ;
- while(n)
- {
- if(n & ) t = t*a%mod;
- a = a*a%mod;
- n >>= ;
- }
- return t;
- }
- Matrix mat;
- Matrix an;
- ll a,b,c;
- void ini(ll mod)
- {
- mat.ma[][] = c,mat.ma[][] = ,mat.ma[][] = ;
- mat.ma[][] = ,mat.ma[][] = ,mat.ma[][] = ;
- mat.ma[][] = b,mat.ma[][] = ,mat.ma[][] = ;
- an.ma[][] = (b+b*c%mod)%mod,an.ma[][] = b,an.ma[][] = ;
- an.ma[][] = b,an.ma[][] = ,an.ma[][] = ;
- }
- ll mod,n;
- int main()
- {
- int T;
- scanf("%d",&T);
- while(T--)
- {
- scanf("%I64d%I64d%I64d%I64d%I64d",&n,&a,&b,&c,&mod);
- a%=mod,b%=mod,c%=mod;
- ini(mod-);
- if(n == )
- {
- printf("1\n");
- }
- else if(n == )
- printf("%I64d\n",pow_mod(a,b,mod));
- else
- {
- mat = Mat_pow(mat,n-,mod-);
- mat = mult(an,mat,mod-);
- ll ci = mat.ma[][];
- //cout << ci <<endl;
- printf("%I64d\n",pow_mod(a,ci,mod));
- }
- }
- return ;
- }
hdu 5667 BestCoder Round #80 矩阵快速幂的更多相关文章
- hdu 5607 BestCoder Round #68 (矩阵快速幂)
graph Accepts: 9 Submissions: 61 Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 ...
- hdu 4686 Arc of Dream(矩阵快速幂)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4686 题意: 其中a0 = A0ai = ai-1*AX+AYb0 = B0bi = bi-1*BX+BY ...
- HDU 4686 Arc of Dream 矩阵快速幂,线性同余 难度:1
http://acm.hdu.edu.cn/showproblem.php?pid=4686 当看到n为小于64位整数的数字时,就应该有个感觉,acm范畴内这应该是道矩阵快速幂 Ai,Bi的递推式题目 ...
- HDU - 4990 Reading comprehension 【矩阵快速幂】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4990 题意 初始的ans = 0 给出 n, m for i in 1 -> n 如果 i 为奇 ...
- HDU 1005 Number Sequence:矩阵快速幂
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1005 题意: 数列{f(n)}: f(1) = 1, f(2) = 1, f(n) = ( A*f(n ...
- HDU 2604 Queuing( 递推关系 + 矩阵快速幂 )
链接:传送门 题意:一个队列是由字母 f 和 m 组成的,队列长度为 L,那么这个队列的排列数为 2^L 现在定义一个E-queue,即队列排列中是不含有 fmf or fff ,然后问长度为L的E- ...
- HDU 6470:Count(矩阵快速幂)
Count Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- hdu 1575 Tr A(矩阵快速幂)
今天做的第二道矩阵快速幂题,因为是初次接触,各种奇葩错误整整调试了一下午.废话不说,入正题.该题应该属于矩阵快速幂的裸题了吧,知道快速幂原理(二进制迭代法,非递归版)后,剩下的只是处理矩阵乘法的功夫了 ...
- hdu 4565 So Easy!(矩阵+快速幂)
题目大意:就是给出a,b,n,m:让你求s(n); 解题思路:因为n很可能很大,所以一步一步的乘肯定会超时,我建议看代码之前,先看一下快速幂和矩阵快速幂,这样看起来就比较容易,这里我直接贴别人的推导, ...
随机推荐
- 1013团队Beta冲刺day1
项目进展 李明皇 今天解决的进度 点击首页list相应条目将信息传到详情页 明天安排 优化信息详情页布局 林翔 今天解决的进度 前后端连接成功 明天安排 开始微信前端+数据库写入 孙敏铭 今天解决的进 ...
- 201621123031 《Java程序设计》第3周学习总结
Week03-面向对象入门 1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识点组织起来.请使用工具画出本周学习到的知识点及知识点之间的联系 ...
- java连接jdbc Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by defa
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jsp_db","root",& ...
- .NET Core/.NET之Stream简介
之前写了一篇C#装饰模式的文章提到了.NET Core的Stream, 所以这里尽量把Stream介绍全点. (都是书上的内容) .NET Core/.NET的Streams 首先需要知道, Syst ...
- django报错Manager isn't accessible via UserInfo instances
出现这种错误是因为调用模型对象时使用了变量名,而不是对象名(模型类),例如: user = UserInfo()user_li = user.objects.filter(uname=username ...
- 怎么用DreamWare新建立一个静态网站的站点
可以上面的图可以看出首先需要用F8确定这个文件是勾选的,然后在D盘建立"华为"文件夹,然后在里面建js,css,image文件夹,然后在DW里面点击站点 然后点击管理站点,有一个新 ...
- Python内置函数(32)——all
英文文档: all(iterable) Return True if all elements of the iterable are true (or if the iterable is empt ...
- restful架构风格设计准则(五)用户认证和session管理
读书笔记,原文链接:http://www.cnblogs.com/loveis715/p/4669091.html,感谢作者! Authentication REST提倡无状态约束,这就要求:用户状态 ...
- Django 相关
Web框架本质 其实所有的Web应用本质就是一个socket服务端,而用户的浏览器就是一个socket客户端.简单的socket代码如下: import socket sk = socket.sock ...
- spring data redis template GenericJackson2JsonRedisSerializer的使用
配置 <!-- redis template definition --> <bean id="myRedisTemplate" class="org. ...