此重复关系何时重复

时间:2012-09-04 10:31:31

标签: math modulo recurrence

我有这个递推公式:

   P(n) = ( P(n-1) + 2^(n/2) ) % (X)
   s.t. P(1) = 2;

其中n / 2是计算机整数除法,即x / 2

的下限

由于我正在使用mod X,因此这个关系至少应该在X输出中重复。

但它可以在此之前开始重复。

如何找到这个值?

1 个答案:

答案 0 :(得分:2)

无需在x条款内重复,请考虑x = 3

P(1)  = 2
P(2)  = (P(1)  + 2^(2/2))  % 3 = 4 % 3        = 1
P(3)  = (P(2)  + 2^(3/2))  % 3 = (1 + 2) % 3  = 0
P(4)  = (P(3)  + 2^(4/2))  % 3 = 4 % 3        = 1
P(5)  = (P(4)  + 2^(5/2))  % 3 = (1 + 4) % 3  = 2
P(6)  = (P(5)  + 2^(6/2))  % 3 = (2 + 8) % 3  = 1
P(7)  = (P(6)  + 2^(7/2))  % 3 = (1 + 8) % 3  = 0
P(8)  = (P(7)  + 2^(8/2))  % 3 = 16 % 3       = 1
P(9)  = (P(8)  + 2^(9/2))  % 3 = (1 + 16) % 3 = 2
P(10) = (P(9)  + 2^(10/2)) % 3 = (2 + 32) % 3 = 1
P(11) = (P(10) + 2^(11/2)) % 3 = (1 + 32) % 3 = 0
P(12) = (P(11) + 2^(12/2)) % 3 = (0 + 64) % 3 = 1

你看到时间是4。

一般情况下(假设X是奇数,偶数X更多涉及),让k为2模X的句点,即{{1} {},k > 02^k % X = 1对这些属性最小(见下文)。

考虑所有算术模k。然后

X

当我们分别考虑奇数和偶数 n P(n) = 2 + ∑ 2^(j/2) j=2

时,会更容易看到
n

因为 m m P(2*m+1) = 2 + 2 * ∑ 2^i = 2 * ∑ 2^i = 2*(2^(m+1) - 1) = 2^((n+2)/2) + 2^((n+1)/2) - 2 i=1 i=0 2^j每个j = 2*i出现两次。对于偶数j = 2*i+1,缺少一个加号n = 2*m,所以

2^m

我们发现期间的长度为P(2*m) = 2^(m+1) + 2^m - 2 = 2^((n+2)/2) + 2^((n+1)/2) - 2 ,因为更改的部分2*k2^((n+1)/2)具有该期间。这段时间立即开始,没有前期部分(偶数2^((n+2)/2)可以有一个前期)。

现在X通过费马定理的Euler's generalisation,所以期间最多为k <= φ(X)。 (φ是Euler's totient function,即2 * φ(X)是带有φ(n)的整数1 <= k <= n。)


如果期限超过gcd(n,k) = 1X P(n+1)未完全由P(n)确定,n的值也会在确定时发挥作用P(n+1),在这种情况下,依赖性很简单,连续两次使用2的每次幂都会使纯粹的2次幂的时间加倍。

考虑奇数a[k] = (2^k) % X的序列X > 1。它有简单的复发

a[0] = 1
a[k+1] = (2 * a[k]) % X

因此每个值完全决定下一个,因此序列的整个后续部分。 (由于X被假定为奇数,因此它还确定先前的值[if k > 0],从而确定序列的整个前一部分。对于H = (X+1)/2,我们有a[k-1] = (H * a[k]) % X。 )

因此,如果序列假设一个值两次(并且因为只有X个可能的值,那必须在第一个X+1值内),在索引i和{{1比方说,重复序列,我们对所有j = i+p > ia[k+p] = a[k]。对于奇数k >= i,我们可以返回序列,因此X也适用于a[k+p] = a[k]。因此,序列中出现两次的第一个值是0 <= k < i

a[0] = 1p的最小正整数。然后a[p] = 1是序列p的最小句点的长度,a当且仅当a[k] = 1k的倍数时,因此该集合期间pa的倍数的集合。欧拉定理说p,我们可以得出结论a[φ(X)] = 1p的除数,特别是φ(X)

现在回到原来的序列。

p <= φ(X) < X

由于每个P(n) = 2 + a[1] + a[1] + a[2] + a[2] + ... + a[n/2] = a[0] + a[0] + a[1] + a[1] + a[2] + a[2] + ... + a[n/2] 连续使用两次,因此分别检查偶数和奇数索引的子序列是很自然的,

a[k]

然后从一个值到下一个值的转换更加规则。对于我们找到的偶数指数

E[m] = P(2*m)
O[m] = P(2*m+1)

和奇数指数

E[m+1] = E[m] + a[m] + a[m+1] = E[m] + 3*a[m]

现在,如果我们忽略当前的模数,O[m+1] = O[m] + a[m+1] + a[m+1] = O[m] + 2*a[m+1] E都是几何和,所以这些术语有一个简单的闭合公式。它们已在上面给出(形式略有不同),

O

因此,我们发现E[m] = 3 * 2^m - 2 = 3 * a[m] - 2 O[m] = 2 * 2^(m+1) - 2 = 2 * a[m+1] - 2 = a[m+2] - 2 O具有相同(最小)的句号,即a,而p也具有该句号。除非E可以被3整除,否则这也是X的最小(正)期(如果E可以被3整除,则X的最小正周期可能是E的适当除数,对于p,例如X = 3是常数。)

因此,我们发现E是通过隔行2*pP获得的序列E的句点。

还有待观察O2*p的最小正周期。让P成为最小的正面时期。然后mm的除数。

假设2*p是奇数,m。然后

m = 2*j+1

因此

P(1) = P(m+1) = P(2*m+1)
P(2) = P(m+2) = P(2*m+2)

但是P(2) - P(1) = P(m+2) - P(m+1) = P(2*m+2) - P(2*m+1)

P(2) - P(1) = a[1]

因此,我们必须P(m+2) - P(m+1) = a[(m+2)/2] = a[j+1] P(2*m+2) - P(2*m+1) = a[(2*m+2)/2] = a[m+1] = a[2*j+2] ,因此a[1] = a[j+1]的句号为ja,因此a[j+1] = a[2*j+2]的句号为j+1也是。但这意味着1是一段a,这意味着a,这是一个矛盾。

因此X = 1是偶数,m。但后来m = 2*j的句号为j(和O),因此是E的倍数。另一方面,p隐含m <= 2*pj <= p满足该不等式的唯一(正)倍数为p本身,因此p,{{ 1}}。