我有这个递推公式:
P(n) = ( P(n-1) + 2^(n/2) ) % (X)
s.t. P(1) = 2;
其中n / 2是计算机整数除法,即x / 2
的下限由于我正在使用mod X,因此这个关系至少应该在X输出中重复。
但它可以在此之前开始重复。
如何找到这个值?
答案 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 > 0
和2^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*k
和2^((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) = 1
,X
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 > i
都a[k+p] = a[k]
。对于奇数k >= i
,我们可以返回序列,因此X
也适用于a[k+p] = a[k]
。因此,序列中出现两次的第一个值是0 <= k < i
。
设a[0] = 1
为p
的最小正整数。然后a[p] = 1
是序列p
的最小句点的长度,a
当且仅当a[k] = 1
是k
的倍数时,因此该集合期间p
是a
的倍数的集合。欧拉定理说p
,我们可以得出结论a[φ(X)] = 1
是p
的除数,特别是φ(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*p
和P
获得的序列E
的句点。
还有待观察O
是2*p
的最小正周期。让P
成为最小的正面时期。然后m
是m
的除数。
假设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]
的句号为j
,a
,因此a[j+1] = a[2*j+2]
的句号为j+1
也是。但这意味着1是一段a
,这意味着a
,这是一个矛盾。
因此X = 1
是偶数,m
。但后来m = 2*j
的句号为j
(和O
),因此是E
的倍数。另一方面,p
隐含m <= 2*p
,j <= p
满足该不等式的唯一(正)倍数为p
本身,因此p
,{{ 1}}。