[HDU 1757] A Simple Math Problem (矩陣快速冪)
題目大意:
If x < 10 f(x) = x.
If x >= 10 f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + …… + a9 * f(x-10);
And ai(0<=i<=9) can only be 0 or 1 .
現在給你k和m,求f(k) % m。
解題思路:
f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + …… + a9 * f(x-10)
其中k為10^9數量級,必然不能用遞推的方式做。這類題目可以通過構造矩陣,用矩陣快速冪來做。
構造的矩陣是:
|0 1 0 ......... 0| |f0| |f1 |
|0 0 1 0 ....... 0| |f1| |f2 |
|................1| * |..| = |...|
|a9 a8 .........a0| |f9| |f10|
代碼:
/*
ID: [email protected]
PROG:
LANG: C++
*/
#include