Official

E - Simple Math 3 Editorial by yosupo


問題文に書いたとおり、この問題は次の条件を満たす正整数 \(i\) を数える問題です。

  • \(A + B\times i \leq x \leq A + C \times i\) を満たす \(D\) の倍数 \(x\) が存在しない。

まず、選べる区間の幅 \((A + C\times i) - (A + B \times i) = (C - B) \times i\) がある程度大きくなると、必ず \(D\) の倍数を含むようになります。

より厳密には、区間の幅が \(D - 1\) 以上になると、必ず \(D\) の倍数を含みます。よって、\(i \le \frac{D - 2}{C - B}\) としてよいです(また、これにより答えが有限なことが示せます)。

この問題の本質は、

  • \(Y \leq x \leq Z\) を満たす \(D\) の倍数 \(x\) が存在しない
  • \(\lfloor \frac{Y - 1}{D} \rfloor = \lfloor \frac{Z}{D} \rfloor\)

この2つの条件が同値であると気づくことです。更に、区間の幅が \(D - 1\) 未満ならば、\(\lfloor \frac{Z}{D} \rfloor - \lfloor \frac{Y - 1}{D} \rfloor\)\(0\)\(1\) になります。

よって、この問題で求めるものは、\(K = \lfloor \frac{D - 2}{C - B} \rfloor\) として

\[K - \sum_{i=1}^{K} (\lfloor \frac{A + C \times i}{D} \rfloor - \lfloor \frac{A + B \times i - 1}{D} \rfloor)\]

となります。

これはAC Libraryのfloor_sum を使用することで高速に計算できます。具体的な方法は、https://atcoder.jp/contests/practice2/tasks/practice2_c の解説を参照してください。

posted:
last update: