ABC230 E - Fraction Floor Sum
有名問題
問題はこちら
問題概要
解説1
答えは
この領域はに関して対称であるため
の領域内の格子点を数えて2倍します.

となり,これを2倍すると
となります.
が答えになります.
以下の領域を2倍して,2回カウントされた正方形領域の個の格子点を引くと考えてもいいです.

解説2
の間以下を繰り返す.
から
が同じ値になる区間を調べていくような感じです.
のとき
としてあり得る値は
個です(そもそも範囲が
なので).
のとき
なので
としてあり得る値は
個です.
したがって,このアルゴリズムの計算量はです.
提出プログラム
解説1N = int(input()) M = int(N ** 0.5) ans = 0 for i in range(1,M+1): ans += N//i ans = 2*ans - M**2 print(ans)
解説2
N = int(input()) ans = 0 L = 1 while L <= N: R = N // (N // L) ans += (R - L + 1) * (N // L) L = R + 1 print(ans)