人間だけど競プロやる

解けなかった問題を理解できたら記事を投稿します。日本語の解説が見つからなかったもの中心。

Educational Codeforces Round 139 (Rated for Div. 2) D. Lucky Chains

d = y-xPdの素因数の集合とする。

\displaystyle{ f(p) =   \lceil  \frac{x}{p} \rceil \times p - x }
\displaystyle{  \forall p \in  P について \qquad   min \lbrace f(p)  \rbrace }

が答え。

xyは互いに素なので両方が、dの素因数pの倍数であることはない。 またdpの倍数なのでxpの倍数の場合、ypの倍数。 よってxyは共にpの倍数ではない。
以上からxyにある数f(p)を足すことでx,y両方をpの倍数にできる。
dのすべての素因数にたいしてこの足す数f(p)の最小値が答え。

注意点1。 y-x=1のとき出力する答えは-1。「差が1の2数は互いに素 \rightarrow gcd(x,y)=1」は有名事実。いくつ足してもxyの差は1のままなので、永遠に互いに素。
注意点2。 上の考察を素直に実装するとTLEになる。素朴に高速化するとMLEになった。いい感じに実装する必要がある。

イメージ図