0321 交换筹码
* * * *
拉格朗日计划
* * * *
交换筹码

把$2n+1$个方格排成一行,其中左侧放有n个红色筹码,每格1个,右侧放有n个蓝色筹码,同样每格1个,两种筹码间用一个空格隔开。例如,当$n=3$时有:



每一步筹码可以滑动到相邻(距离为1)的空格,也可以跳过一个筹码(但不能跳过多个)移动到(距离为2的)空格中。



记$M(n)$是完全逆转筹码位置所需要的最小步数,所谓完全逆转就是将所有的红色筹码移到右边,蓝色筹码移到左边,且同样两种筹码间有一个空格隔开。

可以验证$M(3)=15$,恰是一个三角数。

若将$M(n)$为三角数的$n$单独取出形成一个数列,则这个数列的前五项是:1、3、10、22和63。它们的和为99。

求该数列前40项的和。

本题难度:



解答

显然每个筹码都需要前进$n+1$格才能到达目标位置,因此所有的筹码总共需要移动$2n(n+1)$格。

而跳跃只会发生红蓝筹码的相对位置互换时,因此一共有$n^2$次互换,从而总移动次数是$M(n)=2n(n+1)-n^2=n^2+2n$。

若该数是三角数,则存在$m\in\mathbb N$,使得 $$n^2+2n=\frac{m(m+1)}{2},$$ 简单变形后即得Pell方程 $$(2m+1)^2-8(n+1)^2=-7.$$ 按照例如第66题和第137题的解法,该方程的解是其基本解$(1,1)$和$(5,2)$与标准Pell方程$x^2-8y^2=1$的通解$(a_k,b_k)$按以下方式复合而成: $$\begin{cases}x_{k}=x^*a_k+8y^*b_k, \\ y_k=y^*a_k+x^*b_k,\end{cases}$$ 其中$(x^*,y^*)$是$(1,1)$或$(5,2)$。而$(a_k,b_k)$也可以类似地由 $$\begin{cases} a_{k+1}=3a_k+8b_k, \\ b_{k+1}=a_k+3b_k,\end{cases}$$ 以及初值$a_1=3, b_1=1$计算而得。最终结果是$2470433131948040$。

a,b=3,1
r=[1]
while len(r) < 40:
    for x,y in ((a+8*b,b+a),(5*a+16*b,5*b+2*a)):
        if x%2==1:
            r.append(y-1)
    a,b=3*a+8*b,a+3*b

print sum(r[:40])