2021年2月20日土曜日

CodeChef - Expected Greatest Common Divisor

答える数が特殊。y=PQ1y=P \cdot Q^ {-1}mod  109+7\mod 10^9 + 7で求まっているとき、NyN \equiv -yである。

gcd\gcdの期待値を求める問題だが、総和が求まればよい。

GCDごとに求める典型を思い出す。f(X,r):={(x0,...,xN1)X:gcd(x0,...,xN1)=r}f(X, r) := |\{(x_0, ..., x_{N-1}) \in X : \gcd(x_0, ..., x_{N-1}) = r\}|とする時、求める総和はrrf(X,r)\sum_r rf(X, r)と表せる。最大公約数の代わりに公約数を考える: F(X,r):={(x0,...,xN1)X:rx0,...,xN1の公約数}F(X, r) := |\{(x_0, ..., x_{N-1}) \in X : r が x_0, ..., x_{N-1}の公約数\}|rrx0,...,xN1x_0, ..., x_{N-1}の公約数であることはx0,...,xN1x_0, ..., x_{N-1}がすべてrrの倍数であることと同値で、これは成分毎にわけて数えられる。つまり、[Ai,Bi][A_i, B_i]中のrrの倍数の数がBi/r(Ai1)/r\lfloor B_i / r \rfloor - \lfloor (A_i-1) / r \rfloorで、F(i[Ai,Bi],r)=i(Bi/r(Ai1)/r)F(\prod_i [A_i, B_i], r) = \prod_i \bigl( \lfloor B_i / r \rfloor - \lfloor (A_i-1) / r \rfloor \bigr)と計算できる。F(X,r)=rmf(X,m)F(X, r) = \sum_{r|m} f(X, m)なので、ffFFのメビウス変換で得られる。

全体の計算量は、B=maxBiB= \max B_iとしてO(BK+BloglogB){O}(BK + B\log\log B)A/r\lfloor A / r \rfloorが高々O(A){O}(\sqrt A)種類の値しか取らないから、頑張ればO(KB){O}(K \sqrt B)でできる?

ABC162 Eがこれの簡単バージョンだったことを思い出した。