题意
一个数被称为好的,当且仅当存在一个x∈[n2+1,n2+2∗n]x∈[n2+1,n2+2∗n]使得x|n4x|n4,给定一个m(1≤m≤101000)m(1≤m≤101000),找到一个大于等于mm的最小的好的。
分析(1)
(P.S. 这一部分为正解,大致思路即敦老师的pdf题解[其实就是抄了一遍…加深一下对Pell方程印象])
设n2+a|n4n2+a|n4,则n2+a|n4−(n2−a)(n2+a)=a2n2+a|n4−(n2−a)(n2+a)=a2,又a2≤4n2<4(n2+a)a2≤4n2<4(n2+a),所以a2=t(n2+a)a2=t(n2+a),t=1,2,3t=1,2,3,接下来就对tt进行分类讨论。
(1)当时,a2=n2+aa2=n2+a,a(a−1)=n2a(a−1)=n2无解。
(2)当t=2t=2时,(a−1)2=2n2+1(a−1)2=2n2+1,方程x2−2y2=1x2−2y2=1的初始解(x,y)=(3,2)(x,y)=(3,2),于是通过Pell方程推出通解是n0=0,n1=2,nk+2=6nk+1−nkn0=0,n1=2,nk+2=6nk+1−nk
(3)当t=3t=3时,a2=3n2+3aa2=3n2+3a,设a=3ba=3b,则3b2=n2+3b3b2=n2+3b,设n=3mn=3m,则b2=3m2+3bb2=3m2+3b,(2b−1)2=12m2+1(2b−1)2=12m2+1,得x2−12y2=1x2−12y2=1,初始解为(x,y)=(7,2)(x,y)=(7,2),于是原方程初始解为n0=0,n1=2,nk+2=14nk+1−nkn0=0,n1=2,nk+2=14nk+1−nk
因为只有这几种情况,而且t=1t=1是无解的,所以只存在两个递推式,由于这两个递推式的增长速度很快,所以只要对两个递推式分别暴力枚举到第一个大于等于mm的数字,取就行了。
Code
# 偷懒用python[雾]
n, a, b, c, d = int(input()), 0, 2, 0, 6
while b < n:
b, a = b * 6 - a, b
while d < n:
d, c = d * 14 - c, d
print(min(b, d))
Pell方程
定义
对于形如x2−Dy2=1x2−Dy2=1(D是一个固定正整数但不是完全平方数)的方程,我们将它称作Pell方程。
定理
Pell方程总有正整数解,若(x1,y1)(x1,y1)是使x1x1最小的解,则每个解都可以通过取幂得到:
xk+yk∗D−−√=(x1+y1∗D−−√)kxk+yk∗D=(x1+y1∗D)k
xn+1=x0xn+Dy0ynxn+1=x0xn+Dy0yn,yn+1=y0xn+x0ynyn+1=y0xn+x0yn
xn+2=2x0xn+1−xnxn+2=2x0xn+1−xn,yn+2=2x0yn+1−ynyn+2=2x0yn+1−yn
通过这个定理,我们可以将上面分析中的那个Pell方程求出递推关系式,这样就可以解决这个问题了。
分析(2)
据说还有打完表通过一些技巧推完后通过OEIS得出递推式的,这样也能得出正确答案(然而我并不知道怎么做),请聪明的读者自行思考。