公式解説
約数の問題に有用な関数として、メビウス関数(ここでは、μ(n))があり、以下が成り立ちます。
n を素因数分解して n=∏piei としたとき、素因数の個数を m として
μ(n)={(−1)m0(e1=e2=⋯=em)(otherwise)
なお、μ(1)=1 となります。
これを用いると、次が成り立ちます。
d∣n∑μ(d)An/d=d∣n∑μ(d)e∣n/d∑Be=e∣n∑Bed∣n/e∑μ(d)=Bn
最後の変形は、
d∣n∑μ(d)={10(m=1)(otherwise)
となることから成り立ちます。
(μ(d) と μ(n/d) が通常 1 と −1 になって打ち消しあう、というイメージです)
よって、
Bn=d∣n∑μ(d)An/d
を得ました。
あとは、
Bdn←Bdn+μ(d)An
のように「配る DP」の形で計算することで、計算量を O(1N+2N+⋯+NN)=O(NlogN) に抑えることが出来ました。