牛客网暑期ACM多校训练营(第五场)B. div(技巧+OEIS or Pell方程)

题意

  一个数被称为好的,当且仅当存在一个 x[n2+1,n2+2n] x ∈ [ n 2 + 1 , n 2 + 2 ∗ n ] 使得 x|n4 x | n 4 ,给定一个 m(1m101000) m ( 1 ≤ m ≤ 10 1000 ) ,找到一个大于等于 m m 的最小的好的 n n

分析(1)

  (P.S. 这一部分为正解,大致思路即敦老师的pdf题解[其实就是抄了一遍…加深一下对Pell方程印象])
  设 n2+a|n4 n 2 + a | n 4 ,则 n2+a|n4(n2a)(n2+a)=a2 n 2 + a | n 4 − ( n 2 − a ) ( n 2 + a ) = a 2 ,又 a24n2<4(n2+a) a 2 ≤ 4 n 2 < 4 ( n 2 + a ) ,所以 a2=t(n2+a) a 2 = t ( n 2 + a ) t=1,2,3 t = 1 , 2 , 3 ,接下来就对 t t 进行分类讨论。
  (1)当 t=1 t = 1 时, a2=n2+a a 2 = n 2 + a a(a1)=n2 a ( a − 1 ) = n 2 无解。
  (2)当 t=2 t = 2 时, (a1)2=2n2+1 ( a − 1 ) 2 = 2 n 2 + 1 ,方程 x22y2=1 x 2 − 2 y 2 = 1 的初始解 (x,y)=(3,2) ( x , y ) = ( 3 , 2 ) ,于是通过Pell方程推出通解是 n0=0,n1=2,nk+2=6nk+1nk n 0 = 0 , n 1 = 2 , n k + 2 = 6 n k + 1 − n k
  (3)当 t=3 t = 3 时, a2=3n2+3a a 2 = 3 n 2 + 3 a ,设 a=3b a = 3 b ,则 3b2=n2+3b 3 b 2 = n 2 + 3 b ,设 n=3m n = 3 m ,则 b2=3m2+3b b 2 = 3 m 2 + 3 b (2b1)2=12m2+1 ( 2 b − 1 ) 2 = 12 m 2 + 1 ,得 x212y2=1 x 2 − 12 y 2 = 1 ,初始解为 (x,y)=(7,2) ( x , y ) = ( 7 , 2 ) ,于是原方程初始解为 n0=0,n1=2,nk+2=14nk+1nk n 0 = 0 , n 1 = 2 , n k + 2 = 14 n k + 1 − n k
  因为只有这几种情况,而且 t=1 t = 1 是无解的,所以只存在两个递推式,由于这两个递推式的增长速度很快,所以只要对两个递推式分别暴力枚举到第一个大于等于 m m 的数字,取 min m i n 就行了。

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方程

定义

  对于形如 x2Dy2=1 x 2 − D y 2 = 1 (D是一个固定正整数但不是完全平方数)的方程,我们将它称作Pell方程。

定理

  Pell方程总有正整数解,若 (x1,y1) ( x 1 , y 1 ) 是使 x1 x 1 最小的解,则每个解都可以通过取幂得到:
   xk+ykD=(x1+y1D)k x k + y k ∗ D = ( x 1 + y 1 ∗ D ) k
   xn+1=x0xn+Dy0yn x n + 1 = x 0 x n + D y 0 y n yn+1=y0xn+x0yn y n + 1 = y 0 x n + x 0 y n
   xn+2=2x0xn+1xn x n + 2 = 2 x 0 x n + 1 − x n yn+2=2x0yn+1yn y n + 2 = 2 x 0 y n + 1 − y n
  通过这个定理,我们可以将上面分析中的那个Pell方程求出递推关系式,这样就可以解决这个问题了。

分析(2)

  据说还有打完表通过一些技巧推完后通过OEIS得出递推式的,这样也能得出正确答案(然而我并不知道怎么做),请聪明的读者自行思考。

你可能感兴趣的:(ACM,数论,技巧)