ACM
2016
hdu 1005 Number Sequence (矩阵快速幂加速线性递推式)
题目链接
题意:A number sequence is defined as follows:
f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
Given A, B, and n, you are to calculate the value of f(n).
思路:矩阵加速线性递推式。
这题第一次看是2012年11月2333,当时用pascal写的
hdu 3977 Evil teacher (斐波那契数列循环节)
题目链接
题意:f[0] = 1,f[1] = 1,f[i] = f[i-1] + f[i-2] (i>=2),问最小的m满足f[n]%p==f[n+m]%p
思路:求斐波那契数列循环节。
参考了Acdreamer的博客_Fib数模n的循环节
hdu 3221 Brute-force Algorithm (矩阵快速幂+指数循环节)
题目链接
题意:给出了一段伪代码。分析得知其实就是f[1]= a,f[2] = b,f[n]=f[n-1] * f[n-2]
思路:一眼题,和hdu4549很类似hdu4549解题报告
不同的是这道题中p不一定是质数(其实不是也无所谓啊…hdu4549只不过是因为1E9+7是指数,又用费马小定理化简了一下,这道理%phi(p)即可)
hdu 2837 Calculation (指数循环节+欧拉函数)
题目链接
题意:
Assume that f(0) = 1 and 0^0=1. f(n) = (n)^f(n/10) for all n bigger than zero. Please calculate f(n)%m. (2 ≤ n , m ≤ 10^9, x^y means the y th power of x).
思路:指数循环节。
trick点在于0^0=1这点。
比较容易想到的一层是ksm的时候特判。
比较不容易想到的一层是,0作为底数的时候,可能出现0^a在用降幂公式加速后,出现0^0。
hdu 4335 What is N? (指数循环节+欧拉函数)
题目链接
题意:给出b,p,m(( 0<=b<P, 1<=P<=10^5, 1 <= M <=2^64 – 1 )),问满足图中条件的n有多少个。
思路:这题由于对p没有限制,所以细节多一些,需要讨论。
首先我们知道指数循环节公式,也就是所谓的降幂公式为:a^x = a^(x mod phi(c)+phi(c)) (mod c) x>=phi(c),(ps:后面的限制条件,在x<phi(c)的时候,该式子依然正确,只不过增加了运算复杂度。。。? 存疑)
uva 10692 Huge Mods (欧拉函数,指数循环节)
题目链接
题意:求一个楼梯数%m的大小。
思路:指数循环节。
需要注意的是,模数只有最外层是m,每往里一层,模数都变成m=phi(m)
所以可以写个dfs或者先预处理出每一层m存一下。
hdu 4704 Sum (隔板法,指数循环节,费马小定理)
题目链接
题意:定义s(k)为将n分成k个正整数的划分数,给出n,问s(1) + s(2) + … + s(n-1) + s(n)是多少,结果9+7,其中n<=10^100000。
思路:首先化简要求的式子。
BZOJ 4547: Hdu5171 小奇的集合 (矩阵快速幂)
4547: Hdu5171 小奇的集合 # Time Limit: 2 Sec Memory Limit: 256 MB Submit: 263 Solved: 113 [Submit][Status][Discuss]
Description # 有一个大小为n的可重集S,小奇每次操作可以加入一个数a+b(a,b均属于S),求k次操作后它可获得的S的和的最大值。(数据保证这个值为非负数)
hdu 5171 GTY's birthday gift (矩阵快速幂)
题目链接
题意:给出n,k,以及n个正数,把n个数放在一个集合里,进行k次操作,每次操作取最大的数和次大的数放进集合。问k次操作结束后,集合中所有数的和。
思路:假设初始时刻,次大和最大分别为a0,a1,那么得到的就是一个类斐波那契数列。初始为a0,a1,fn = fn-1 + fn
hdu 4965 Fast Matrix Calculation (矩阵快速幂,2014多校#9)
题目链接
题意:Step 1: Calculate a new NN matrix C = AB. Step 2: Calculate M = C^(N*N). Step 3: For each element x in M, calculate x % 6. All the remainders form a new matrix M’. Step 4: Calculate the sum of all the elements in M’.
思路: 水题。。就一个trick…
hdu 2157 How many ways?? (矩阵快速幂经典题目)
题意:给定一个有向图,问从A点恰好走k步(允许重复经过边)到达B点的方案数mod p的值
思路: ** 把给定的图转为邻接矩阵,即A(i,j)=1当且仅当存在一条边i->j。令C=A*A,那么C(i,j)=ΣA(i,k)A(k,j),实际上就等于从点i到点j恰好经过2条边的路径数(枚举k为中转点)。类似地,CA的第i行第j列就表示从i到j经过3条边的路径数。同理,如果要求经过k步的路径数,我们只需要快速幂求出A^k即可。**
hdu 1211 RSA (扩展欧几里得算法求逆元 +快速幂)
题目链接
题意:给出p, q, e, l,令n = p * q, fn = (p-1) * (q-1)
给出l个c,计算m = D(c) = c**d** mod n,其中m为要输入的明文对应的ascii编码,d的计算方法:> calculate d, making d × e mod F(n) = 1 mod F(n), and d will be the private key。
poj 3233 Matrix Power Series (矩阵快速幂+分治)
题目链接
题意:
Given a n × n matrix A and a positive integer k, find the sum S = A + _A_2 + _A_3 + … + Ak.
思路: 对k进行二分。
比如,当k=6时,有: A + A^2 + A^3 + A^4 + A^5 + A^6 =(A + A^2 + A^3) + A^3*(A + A^2 + A^3) 应用这个式子后,规模k减小了一半。我们二分求出A^3后再递归地计算A + A^2 + A^3,即可得到原问题的答案。
poj 3070 Fibonacci (矩阵加速线性递推式)
题目链接
题意:求f[n] % 10000,f为斐波那契数。
思路:按照题目给出的公式,或者按照加速线性递推式的方法都可以。。。
因为把模数的1E4手滑写成1E4+7结果调了半天也是没谁了呵呵呵呵。
矩阵加速线性递推式(转载)
找到了篇四年前空间中的旧文,也是有点感动2333.
快速求解多项递推式 # 问题描述:
已知 F(n) = AF(n-1) + BF(n-2) + CF(n-3)+…..
求解 F(n)%P
分析:
*************************************