标签: 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的除数。
a[0], a[1], a[2],..., a[n-1]
我目前的解决方案是计算n的所有除数(这是k)并测试所有k,但需要O(n * d(n))。我认为这很慢 有没有有效的算法?
O(n * d(n))
答案 0 :(得分:3)
将Z算法(here和here)应用于给定序列。
然后找到第一个位置i,以便
i
i+z[i] = n
和
n mod i = 0
如果存在i的这样的值,则它是最短的时间段