문제
파이썬
def solution(n):
answer = 0
for i in range(1, n+1):
answer += (n//i) * i
return answer
n = int(input())
print(solution(n))
풀이
- 처음엔 제곱근을 사용하여 약수의 합을 구하고 2중 for문을 돌려 해결하려 했으나 시간초과가 뜸
- (n//i)는 n아래에서 i를 약수로 갖고있는 숫자들의 갯수를 의미
- 고로 (n//i) * i 를 순차적으로 n까지 오면서 더하면 모든 약수들의 합이 된다.