https://www.acmicpc.net/problem/17425
시간 초과
import sys
def solution():
# 입출력
read = sys.stdin.readline
write = sys.stdout.write
testcase = int(read())
for _ in range(testcase):
# g(n) 출력
n = int(read())
write(f'{get_g(n)}\n')
def get_g(n):
g = 0
for i in range(1, n+1):
# n 이하의 자연수 중 i로 나누어 떨어지는 수의 갯수
temp = n // i
g += temp * i
return g
solution()
import sys
def solution():
# 입출력
read = sys.stdin.readline
write = sys.stdout.write
# 입력 받기
testcase = int(read())
numbers = [int(read()) for _ in range(testcase)]
max_n = max(numbers)
f = [0] * (max_n + 1) # 약수의 합 리스트
dp = [0] * (max_n + 1)
# 더해줄 수
for i in range(1, max_n+1):
# 곱해줄 수
j = 1
while True:
# i * j : 약수로 i를 갖는 수
f[i * j] += i
j += 1
if i * j >= len(f):
break
# dp 구하기
for i in range(1, max_n+1):
dp[i] = dp[i-1] + f[i]
# 출력
for n in numbers:
write(f'{dp[n]}\n')
solution()