HDU 4565 So Easy! 矩阵快速幂
题意:
求\(S_n=\left \lceil (a+\sqrt{b})^n \right \rceil mod \, m\)的值。
分析:
设\((a+\sqrt{b})^n=A_n+B_n \sqrt{b}\),
\((a+\sqrt{b})^{n+1}=(a+\sqrt{b})(A_n+B_n \sqrt{b})=(aB_n+A_n)+(A_n+aB_n) \sqrt{b}\),
所以有转移矩阵:
$\begin{bmatrix}
a & b \
1 & a
\end{bmatrix}
\begin{bmatrix}
A_n\
B_n
\end{bmatrix}
\begin{bmatrix}
A_{n+1}\
B_{n+1}
\end{bmatrix}$
如果把\(\sqrt{b}\)变为\(-\sqrt{b}\),就得到\((a- \sqrt{b})^n=A_n-B_n \sqrt{b}\)。
两式相加:\((a+\sqrt{b})^n+(a-\sqrt{b})^n=2A_n\)。
再由题中所给条件知道,\(a-\sqrt{b}\)是个小于\(1\)的数,所以\(\left \lceil (a+\sqrt{b})^n \right \rceil=2A_n\)。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int a, b, n, m;
int mul(int a, int b) { return a * b % m; }
void add(int& a, int b) { a += b; if(a >= m) a -= m; }
struct Matrix
{
int a[2][2];
Matrix() { memset(a, 0, sizeof(a)); }
Matrix operator * (const Matrix& t) const {
Matrix ans;
for(int i = 0; i < 2; i++)
for(int j = 0; j < 2; j++)
for(int k = 0; k < 2; k++)
add(ans.a[i][j], mul(a[i][k], t.a[k][j]));
return ans;
}
};
Matrix pow_mod(Matrix a, int p) {
Matrix ans;
for(int i = 0; i < 2; i++) ans.a[i][i] = 1;
while(p) {
if(p & 1) ans = ans * a;
a = a * a;
p >>= 1;
}
return ans;
}
int main()
{
while(scanf("%d%d%d%d", &a, &b, &n, &m) == 4) {
a %= m; b %= m;
Matrix M;
M.a[0][0] = a; M.a[0][1] = b;
M.a[1][0] = 1; M.a[1][1] = a;
M = pow_mod(M, n - 1);
int ans = 0;
add(ans, mul(M.a[0][0], a));
add(ans, M.a[0][1]);
ans = mul(ans, 2);
printf("%d\n", ans);
}
return 0;
}
HDU 4565 So Easy! 矩阵快速幂的更多相关文章
- [ An Ac a Day ^_^ ] hdu 4565 数学推导+矩阵快速幂
从今天开始就有各站网络赛了 今天是ccpc全国赛的网络赛 希望一切顺利 可以去一次吉大 希望还能去一次大连 题意: 很明确是让你求Sn=[a+sqrt(b)^n]%m 思路: 一开始以为是水题 暴力了 ...
- hdu4565 So Easy! 矩阵快速幂
A sequence Sn is defined as: Where a, b, n, m are positive integers.┌x┐is the ceil of x. For example ...
- HDU.1575 Tr A ( 矩阵快速幂)
HDU.1575 Tr A ( 矩阵快速幂) 点我挑战题目 题意分析 直接求矩阵A^K的结果,然后计算正对角线,即左上到右下对角线的和,结果模9973后输出即可. 由于此题矩阵直接给出的,题目比较裸. ...
- hdu 3117 Fibonacci Numbers 矩阵快速幂+公式
斐波那契数列后四位可以用快速幂取模(模10000)算出.前四位要用公式推 HDU 3117 Fibonacci Numbers(矩阵快速幂+公式) f(n)=(((1+√5)/2)^n+((1-√5) ...
- 2013长沙邀请赛A So Easy!(矩阵快速幂,共轭)
So Easy! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- HDU 2842 (递推+矩阵快速幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2842 题目大意:棒子上套环.第i个环能拿下的条件是:第i-1个环在棒子上,前i-2个环不在棒子上.每个 ...
- hdu 2604 Queuing(矩阵快速幂乘法)
Problem Description Queues and Priority Queues are data structures which are known to most computer ...
- HDU 5950 - Recursive sequence - [矩阵快速幂加速递推][2016ACM/ICPC亚洲区沈阳站 Problem C]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5950 Farmer John likes to play mathematics games with ...
- 2013长春网赛1009 hdu 4767 Bell(矩阵快速幂+中国剩余定理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4767 题意:求集合{1, 2, 3, ..., n}有多少种划分情况bell[n],最后结果bell[ ...
随机推荐
- Java输入输出流简单案例
package com.jckb; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io. ...
- c#基础3-方法的重载静态和非静态,字段属性,方法
方法的重载概念:方法的重载指的就是方法的名称相同给,但是参数不同.参数不同,分为两种情况1).如果参数的个数相同,那么参数的类型就不能相同.2).如果参数的类型相同,那么参数的个数就不能相同.***方 ...
- SQL函数TIMEDIFF在Java程序中使用报错的问题分析
需求背景 (读者可略过)司机每天从早到晚都会去到不同的自动售货机上补货,而且补货次数和路线等也是因人而异,补货依据是由系统优化并指派.但是目前系统还无法实施有效指挥和优良的补货策略,司机的补货活动因此 ...
- Redis set(集合)
Redis 的 Set 是 String 类型的无序集合,元素不允许重复. Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1). 集合中最大的元素数为 232 - 1 ( ...
- text-transform字母大小写属性设置
text-transform: none: 默认 不设置,全是小写 capitalize: 每个单词以大写字母开头 uppercase: 全部是大写字母 lowercase: 全部是小写字母 in ...
- PHP 获取JSON json_decode返回NULL解决办法
在用json_decode对JSON格式的字符串进行解码时竟然为空,页面空白啊,整半天检查这里检查那里,问同事都没用. 今天必应搜索了下,问题解决了,原来是有BOM头输出,大虾的解决办法如下: 1). ...
- MySQL查询优化方法总结
1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉 ...
- windows server 2008 r2 启用 Windows Defender
单击“开始”,指向“管理工具”,然后单击“服务器管理器”. 在“服务器管理器”中,单击“功能”,然后在“服务器管理器”细节窗格中的“功能摘要”下,单击“添加功能”. 此时会启动“添加功能向导”. 在“ ...
- 使用JDK自带的VisualVM进行Java程序的性能分析
VisualVM是什么? VisualVM是JDK自带的一个用于Java程序性能分析的工具,JDK安装完毕后就有啦,在JDK安装目录的bin文件夹下能找到名称为jvisualvm.exe. 要使用Vi ...
- NGUI类之间的关系架构
NGUI Drawcall 1.使用同一个altals的元素尽量放在同一个UIPanel下面,在NGUI中,它消耗的drawcall是以每个Panel为独立计算单位进行计算的. 2.如果一个UIPan ...