# Good Sequences (opens new window)

# Problem

  • Squirrel Liss is interested in sequences.

  • She also has preferences of integers.

  • She thinks n integers a1, a2, ..., an are good.

  • Now she is interested in good sequences.

  • A sequence x1, x2, ..., xk is called good if it satisfies the following three conditions:

    • The sequence is strictly increasing, i.e. xi < xi + 1 for each i (1 ≤ i ≤ k - 1).
    • No two adjacent elements are coprime, i.e. gcd(xi, xi + 1) > 1 for each i (1 ≤ i ≤ k - 1) (where gcd(p, q) denotes the greatest common divisor of the integers p and q).
    • All elements of the sequence are good integers.
  • Find the length of the longest good sequence.

# 愚直DP解

  • dp[i] := 自然数iを最後に使った時のgood sequenceの最大長
    • この時, 隣接する2要素についてgcdを求める必要がある
    • gcd(i,j)で, O(N^2 * logn)
    • TLEですね

# 想定DP解

  • dp[i] := 自然数iを最後に使った時のgood sequenceの最大長
  • newdp[k] := kを約数にもつような, 自然数iに対するdp[i]の最大値
    • i = k*n
    • dp[k]を計算する時
      • kがiの倍数であるようなiに対してnewdp[i]の最大値をとって1を足す
        • \because newdp[k]の定義
      • そのあと, newdp[i]をdp[k]の値で埋める
Last Updated: 1年前