万能欧几里得算法

该算法用于解决以下模型:
$$
F(P, R, Q, n, X, Y) = \prod_{i=0}^n Y^{f(i) - f(i - 1)} X
$$

这里 $X,Y$ 之间的乘法运算是自己定义的, 只需要满足结合律即可. 其中 $f(x) = \left\lfloor \dfrac{xP+R}{Q}\right\rfloor$, $P,R \in N$, $Q \in Z^{+}$. 特别的,$f(-1)=0$.

不难发现所有的类欧几里得都可以规约到以上模型.

以下把连乘展开构成的字符串称作 $S$.
分类讨论. 当 $n=0$ 时可以直接求解. 接下来考虑 $n \geq 1$.

当 $R < Q$ 时, $S$ 的开头一定是 $X$;
当$R \geq Q$ 时, 我们可以将 $S$ 开头的 $Y$ 全部提出来,即
$$
F(P, R, Q, n, X, Y) = Y^{\lfloor \frac{R}{Q} \rfloor} F(P, R \bmod Q, Q, n, X, Y)
$$
接下来我们钦定 $R < Q$.

当 $P \geq Q$ 时, 相邻的两个 $X$ 之间一定会有固定的 $\left\lfloor \dfrac{P}{Q} \right\rfloor$ 个 $Y$, 于是我们直接把这些 $Y$ 接在 $X$ 的前面. 可以得到
$$
F(P, R, Q, n, X, Y) = X\ F(P \bmod Q, R + P \bmod Q, Q, n - 1, Y^{\lfloor \frac{P}{Q} \rfloor} X, Y)
$$

为了可以进行辗转相除, 我们需要将原式进行一些变换来使得 $P,Q$ 的地位交换.
特别的, 我们发现 $f(i)$ 表示的是编号为 $i$ 的 $X$ 之前的 $Y$ 的数量, 同样的, 我们定义 $g(i)$ 表示编号为 $i$ 的 $Y$ 之前的 $X$ 的数量. 考虑 $g(i)$ 的计算.
$$
\begin{aligned}
g(i) &= \sum_{j \geq 0} \left[f(j) \leq i\right] \\
&= \sum_{j \geq 0} \left[ \left\lfloor \dfrac{jP + R}{Q} \right\rfloor < i + 1 \right] \\
&= \sum_{j \geq 0} \left[\dfrac{jP + R}{Q} < i + 1 \right] \\
&= \sum_{j \geq 0} \left[jP \leq iQ + Q - R - 1 \right] \\
&= \sum_{j \geq 0} \left[j \leq \left\lfloor \dfrac{iQ + Q - R - 1}{P} \right\rfloor \right] \\
&= \left\lfloor \dfrac{iQ + Q + P - R - 1}{P} \right\rfloor
\end{aligned}
$$

令 $t = \left\lfloor \dfrac{nP + R}{Q} \right\rfloor$, 容易得出
$$
F(P, R, Q, n, X, Y) = F(Q, Q + P - R - 1, P, t - 1, Y, X) \; X^{n-\lfloor\frac{Qt-R-1}{P}\rfloor}
$$
$t = 0$ 时需要特判. 时间复杂度 $\mathcal O(\log n)$.

posted @ 2024-04-13 17:04  cqbzljh  阅读(174)  评论(0)    收藏  举报