GCD如何确定旋转阵列所需的周期数?
因为内部循环以的步长递增
d,并在返回起点时停止,即总跨度是的倍数
n。那是
LCM(n, d)。因此,该循环中的元素数为
LCM(n, d) /d。这样的循环总数为
n / (LCM(n, d) / d),等于
GCD(n, d)。
为什么一旦完成一个循环,就从下一个元素开始新的循环,即下一个元素不能已经成为已处理循环的一部分?
否。内部循环以的步长递增
d,是的倍数
GCD(n, d)。因此,当我们开始第-
i个周期时,我们需要
(k*GCD + z) % n ==i(for
0 <= z < i)命中。这导致
(k*GCD) % n == (i - z)。这显然没有解决方案。



