P2044 随机数生成器 题解
这么标准的不动点居然只有一篇不动点题解?
而且唯一的不动点题解关于不动点的描述还是错的?
所以,来写一篇题解讲讲,MO 中是怎么弄这种一阶线性递推式的。
单个数,虽然省常数,却难以取膜。
让我们对形如 \(x_{n+1} = f(x_n)\) 的式子求出通项,其中 \(f(x_n)\) 是一个关于 \(x_n\) 的一次函数。
左右两边都是一次的,但是一次项的系数有差距。所以我们可以知道这东西到后面是以指数增长的。
如果这样的式子是 \(x_{n+1} = k \cdot x_n\) 的,我们就能立刻知道 \(x_{n+1} = k^n \cdot x_1\)。换而言之,重要的是消除常数项在递推中的影响,这可以通过换元实现。
尝试以 \(x-c\) 代 \(x\),使得 \(x'_{n+1} = k \cdot x'_n\)。
写开,
若原递推式为 \(x_{n+1} = a \cdot x_n + b\),对比系数知 \(k = a, c = \dfrac{b}{1-a}\)。于是我们就有 \(x_{n+1} - \dfrac{b}{1-a} = a \cdot (x_n - \dfrac{b}{1-a})\)。这是一个漂亮的结果,借助它,我们能进行快速幂运算。
这里我们求出的 \(c\) 叫不动点,意义很简单:使 \(f(c) = c\) 的点,在迭代中不动的点。熟知 \(x-t\) 整除 \(f(x)\) 等价于 \(f(t)=0\)。我们能发现 \(f(x)-c=x-c\),此时 \(f(x)-c\) 含有 \(x-c\) 这个因式,所以一边出现了 \(x_{n+1}-c\),一边出现了 \(x_n-c\)。
这里的不动点,用处就是平移图像以消去常数项。
代码难写处在于 \(a-1\) 不一定有逆元,这个的处理方式 这篇题解 的最后有提到。需要提起的是,这篇题解关于不动点的定义是错误的,这也是我写这篇题解的意义。
本文来自博客园,作者:purplevine,转载请注明原文链接:https://www.cnblogs.com/purplevine/p/16732819.html