0492 爆炸序列
* * * *
拉格朗日计划
* * * *
爆炸序列

设$a_1=1$,且 $$a_{n+1}=6a_n^2+10a_n+3.$$ 不难验证 \begin{align*} a3&= 2359, \\ a_6&= 269221280981320216750489044576319=203064689 \pmod{10^9+7}, \\ a_{100}&=456482974 \pmod{10^9+7}. \end{align*} 对与满足$x\le p\le x+y$的所有素数$p$,令$B(x,y,n)$为$a_n$模$p$之和。可以验证 $$B(10^9, 10^3, 10^3)=23674718882, \quad B(10^9, 10^3, 10^{15})=20731563854.$$ 求$B(10^9, 10^7, 10^{15})$。

本题难度:



解答

令$b_n=6a_n+5$,则有$b_1=11, b_{n+1}=b_n^2-2$。

若将$b_1$写作$k+1/k$的形式,则有$k^2+1/k^2=(k+1/k)^2-2$,从而 $$b_n=k^{2^{n-1}}+\dfrac{1}{k^{2^{n-1}}}.$$ $k+1/k=11$的解是$(11\pm3\sqrt{13})/2$,因此若13是p的二次剩余,则可以直接在有限域$\mathbb Z_p^*$中解出$k$,否则可在域$\mathbb Z_p(\sqrt{13})$中解出$k$,这是因为$\mathbb Z_p^*(\sqrt{13})$中的数都具有$a+b\sqrt{13}$的形式,结果中$k^m+k^{-m}$保证了$\sqrt{13}$前的系数必定为$0$。

代入计算即可得最终结果$242586962923928$。

注:因使用sympy作$\mathbb Z_p$中的相关计算,以下代码为Python 3。

import sympy

start=10**9
interval=10**7
n=10**15

f=lambda ax,ay,ux,uy:((ax*ux+ay*uy*13)%p,(ax*uy+ay*ux)%p)

res=0
for p in sympy.primerange(start,start+interval):
    inv2=(p+1)//2
    if pow(13,(p-1)//2,p)==1:
        x=pow((3*sympy.sqrt_mod(13,p)+11)*inv2%p,pow(2,n-1,p-1),p)
        s=x+sympy.mod_inverse(x,p)
    else:
        ux,uy=11*inv2%p,3*inv2%p
        m=pow(2,n-1,p*p-1)
        ax,ay=1,0
        while m:
            if m%2:
                ax,ay=f(ax,ay,ux,uy)
            ux,uy=f(ux,uy,ux,uy)
            m//=2
        s=2*ax
    res+=(s-5)*sympy.mod_inverse(6,p)%p

print(res)