https://www.acmicpc.net/problem/17425
17425번: 약수의 합
두 자연수 A와 B가 있을 때, A = BC를 만족하는 자연수 C를 A의 약수라고 한다. 예를 들어, 2의 약수는 1, 2가 있고, 24의 약수는 1, 2, 3, 4, 6, 8, 12, 24가 있다. 자연수 A의 약수의 합은 A의 모든 약수를 더
www.acmicpc.net
<내 코드>
- dp 리스트에 각 수에 해당하는 약수의 합을 계산해서 넣는다.
-> 에라토스테네스의 채 같은 느낌
-> 모든 수는 1을 약수로 가지기 때문에 dp 리스트는 1로 초기화한다.
- s 리스트는 약수의 누적합을 담는 리스트이다.
-> for문을 돌면서 s리스트의 인덱스 -1 + dp리스트를 해서 누적합을 계산한다.
import sys
input = sys.stdin.readline
Max = 1000001
dp = [1]* Max #각 수 별로 1-Max 까지 약수의 합
s = [0] * Max #누적값
for i in range(2, Max):
j = 1
while i*j < Max:
dp[i*j] +=i
j += 1
for i in range(1, Max):
s[i] = s[i-1] + dp[i]
t = int(input())
for _ in range(t):
n = int(input())
print(s[n])
'알고리즘 > 기타' 카테고리의 다른 글
[백준-실버1] 9020번 골드바흐의 추측 (수학, 파이썬) (0) | 2022.03.04 |
---|---|
[백준-실버2] 4948번 베르트랑 공준 (수학, 파이썬) (0) | 2022.03.04 |
[백준-실버5] 11653번 소인수분해 (수학, 파이썬) (0) | 2022.03.04 |
[백준-실버5] 2581번 소수 (수학, 파이썬) (0) | 2022.03.04 |
[백준-브론즈1] 1193번 분수찾기 (수학, 파이썬) (0) | 2022.03.04 |