查找序列的周期

时间:2017-04-28 10:54:10

标签: arrays algorithm computer-science number-theory period

我想解决这个问题:

对于给定的序列a[0], a[1], a[2],..., a[n-1],请查找序列的“句点” 该周期是满足所有有效i的[i] = a [i + k]的最小整数k(k> = 1),并且k是n的除数。

我目前的解决方案是计算n的所有除数(这是k)并测试所有k,但需要O(n * d(n))。我认为这很慢 有没有有效的算法?

1 个答案:

答案 0 :(得分:3)

将Z算法(herehere)应用于给定序列。

然后找到第一个位置i,以便

  i+z[i] = n

  n mod i = 0

如果存在i的这样的值,则它是最短的时间段