ABC172 D - Sum of Divisors
https://atcoder.jp/contests/abc172/tasks/abc172_d
提出
code: python
n = int(input())
def make_divisors(n):
lower_divisors , upper_divisors = [], []
i = 1
while i*i <= n:
if n % i == 0:
lower_divisors.append(i)
if i != n // i:
upper_divisors.append(n//i)
i += 1
return lower_divisors + upper_divisors::-1
ans = 0
# どこかでメモ化しないといけない
for i in range(1, n+1):
ans += i * len(make_divisors(i))
print(ans)
解答
https://scrapbox.io/files/61ca4976fa875f001d68d464.png
縦の個数がf(K)
code: python
n = int(input())
ans = 0
# 1で割り切れる数の和は1+2+...+8
# 2で割り切れる数の和は2+4+...+8
for i in range(1, n+1):
x, y = i, (n//i)*i
# 等差数列の和 = (項数*(初項+末項)) / 2
ans += ((n//i) * (x + y) // 2)
print(ans)