728x90
728x90
처음에는,, N보다 작은 자연수의 약수를 하나씩 구해서 다 더한값을 리턴하는걸로
동적계획법을 사용해서 코딩을 했는데 당연히 시간초과가 났다.
어쨌든 수학 카테고리에 있는거니까, 아마 동적계획법과는 상관 없을거라고 생각하고,
하나씩 풀어서 해봤다.
한 10까지 해 보니까 약수의 합이라고 하는게
결국은 n을 1부터 나누었을때의 몫을 다 더하면 되는거였다.
예를들어서 n이 6이라고 했을때,
1은 6번(1*6)
2는 3번(2*3)
3은 2번(3*2)
4는 1번(4*1)
5는 1번(5*1)
6은 1번(6*1)
다 더하면 33이 나온다.
실제로 약수를 구하면
1:1
2: 1,2
3: 1,3
4: 1,2,4
5: 1,5
6: 1,2,3,6
이렇게 되는데 나오는 횟수가 결국은 n을 나누어 나온 몫이라는것을 알 수 있다.
N=int(input())
ans=0
for i in range(1,N+1):
ans+=i*(N//i)
print(ans)
728x90
'Baekjoon Case' 카테고리의 다른 글
[파이썬 / 백준 3084] 사탕게임 (0) | 2021.12.14 |
---|---|
[파이썬 / 백준 4375 번] 1 (0) | 2021.12.09 |
[파이썬 / 백준 1655 번] 가운데를 말해요 (0) | 2021.12.08 |
[파이썬 / 백준 5355 번] 화성수학 (0) | 2021.12.07 |
[파이썬 / 백준 2960번] 에라토스테네스의 체 (0) | 2021.11.27 |