[CODEVS 1281] Xn数列
描述
給你6個數,m, a, c, x0, n, g
Xn+1 = ( aXn + c ) mod m,求Xn
http://codevs.cn/problem/1281/
分析
比較裸的矩陣乘法題, 好久沒做了, 寫寫思路
假設矩陣 A = { {a1, a2}, {a3, a4} }, B = { {b1, b2}, {b3, b4} }.
根據矩陣乘法的計算方法, 有 :
A×B = { {a1b1+a2b2, a1b2+a2b4}, {a3b1+a4b3, a3b2+a4b4} }.
那么我們想得到的是 a*Xn + c = Xn+1
假設 X 存在a1里, 那么應有 Xn * b1 + a2 * b2 = Xn+1
那么就可以得到 a2 = 1, b1 = a, b2 = c.
(為什么不能 a2 = c, b2 = 1 ? 因為乘完一次 a2 就變了, 下個加的就不是 c 了).
這樣矩陣就建好了, 接下來就是按部就班的矩陣乘法了.
不過, 這里數據太大, 不使用特殊技巧用 unsigned long long 都會溢出. 高精度 ? 其實不用, 因為最后都要模一下.
特殊技巧
用類似快速冪的方法寫一個快速加, 加一下模一下, 用來避免直接乘的溢出.
代碼
20ms 256kB
額… 難道 mod 和 sum 都是保留字 ? 為啥都有高亮 ?
總結
以上是生活随笔為你收集整理的[CODEVS 1281] Xn数列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [CODEVS 1050] 棋盘染色 2
- 下一篇: [CODEVS 3147] 矩阵乘法 2