ABC
E
整数
ABC230 E - Fraction Floor Sum
https://atcoder.jp/contests/abc230/tasks/abc230_e (opens in a new tab)
緑下位。整数問題
実は の格子点の数を問われている。
上図は で対称なので、 となる部分の格子点の個数を求めて 2 倍してやればよい。 このとき と の交点の座標は であり、 の範囲の格子点を数え上げればよいことになる。
と に囲まれた部分の格子点の個数は、 で求まるので、 について計算し足し合わせる。
grid = 0
for x in range(1, int(N ** .5) + 1):
grid += N // x - (x - 1)
前述の通り で線対称なので値を 2 倍し、重複して数えられた 上の格子点を除けば答えとなる。
N = int(input())
grid = 0
for x in range(1, int(N ** .5) + 1):
grid += N // x - (x - 1)
print(grid * 2 - int(N ** .5))