(Xmodi)=Xifloor(X,i)(X\bmod i) = X - i * floor(X,i)

この関係式を使ってansansの値を整理します。

ansans

=i=1Y{Xifloor(X,i)}= \sum_{i=1}^{Y} \{ X - i * floor(X,i) \}

=XYi=1Y{ifloor(X,i)} = XY - \sum_{i=1}^{Y} \{i * floor(X,i) \}

です。

floor(X,i)floor(X,i)の値は、floor(X)floor(\sqrt{X}) より大きいものと、それ以下のもののグループに分けることができます。

前者に関しては、それを与えるiiの種類は高々floor(X)floor(\sqrt{X})個ほどしかないため、O(X)O(\sqrt{X})で全探索することができます。 後者に関しては、ある固定された自然数kkに対し、floor(X,i)=kfloor(X,i) = k となるようなiiについて考えると、ii

floor(X,k+1)<ifloot(X,k)floor(X,k + 1) < i \leq floot(X,k)

という連続した範囲で与えられることがわかります。

従って、それぞれのkkに対して、floor(X,i)ifloor(X,i) * iの合計値をO(1)O(1)で得られるため、 後者もO(X)O(\sqrt{X})で求められます。

以上より、i=1Y{ifloor(X,i)}\sum_{i=1}^{Y} \{i * floor(X,i) \}の値はO(X)O(\sqrt{X})で計算できるので、ansansO(X)O(\sqrt{X})で求めることができます。

C/C++などの言語を用いる際はオーバーフローに注意してください。