[数论][矩阵乘法]Floor it
Floor it
Time Limit: 10 Sec Memory Limit: 256 MB
Description
令 x = (sqrt(5) + 1) / 2,求 floor(x^n) % p。
Input
一行两个整数 n, p。
Output
一行表示答案。
Sample Input
5 97
Sample Output
11
HINT
n <= 1e18, p <= 998244353。
Solution
首先这必然是一道数学题。我们令 x = (1 + sqrt(5)) / 2, y = (1 - sqrt(5)) / 2 。
那么我们发现, x 和 y 分别是 x^2 - x - 1 = 0 的两个实数根。那么有 x^2 = x + 1。
我们这样操作:
x^2 = x + 1
x^2 * x^(n-2) = x * x^(n-2) + x^(n-2)
x^n = x^(n-1) + x^(n-2)
令 An 表示 x^n,Bn 表示 y^n。那么显然有 An = An-1 + An-2,Bn = Bn-1 + Bn-2。
这时候 (An + Bn) = (An-1 + Bn-2) + (An-2 + Bn-2)。
我们代入n = 1,(An + Bn) = 1;n = 2,(An + Bn) = 3。所以我们可以用矩阵乘法求出 An + Bn。
因为答案要求An,那么这时候我们只要消掉 Bn 即可。显然 y ≈ -0.618,那么 y^n 取值范围在 (-1, 0)∪(0, 1)。
显然当 n 为偶数时, floor(x^n) = floor(x^n + y^n) - 1;n 为奇数时,floor(x^n) = floor(x^n + y^n)。
这样我们就得到了答案QWQ。
Code
1 |
|
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.