| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- 객체지향
- 다이나믹 프록시
- OS
- spring security
- CS
- 문자열
- Spring
- 프록시
- BOJ
- 최소 신장 트리
- MST
- 리플렉션
- 스프링 시큐리티
- java
- proxy
- redis
- Python
- Junit5
- 파이썬
- 백준
- 운영체제
- 모던 자바 인 액션
- 모던자바
- 스프링
- Deadlock
- 자바
- Reflection
- test
- 알고리즘
- 약수
Archives
- Today
- Total
Dev 달팽이 @_''
[파이썬] 백준 17425 번 : 약수의 합 본문
출처 : 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
이 문제는 dabonee.tistory.com/19
[파이썬] 백준 17427 번 : 약수의 합2
출처 : www.acmicpc.net/problem/17427 17427번: 약수의 합 2 두 자연수 A와 B가 있을 때, A = BC를 만족하는 자연수 C를 A의 약수라고 한다. 예를 들어, 2의 약수는 1, 2가 있고, 24의 약수는 1, 2, 3, 4, 6, 8,..
dabonee.tistory.com
위 문제와 같지만 다른 문제이다. 약수의 합2와 같은 방법으로 푼다면 시간초과가 나기 때문에 다른 방법을 찾아야 한다.
여기서 d라는 배열에 약수의 합을 구하였다. 이 때, 배수의 원리를 이용하였다.
예를 들어 6이라는 숫자를 들어보자. 1부터 6까지 1의 배수는 모두 다 해당되고 2의 배수는 2,4,6이 해당된다. 이렇게 해당되는 곳에 표시를 하면 아래와 같다.
| d | 1 | 2 | 3 | 4 | 5 | 6 |
| 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| 2 | 2 | 2 | 2 | |||
| 3 | 3 | 3 | ||||
| 4 | 4 | |||||
| 5 | 5 | |||||
| 6 | 6 |
우리는 위에 표에서 해당하는 열의 값을 더하여 약수의 합을 구할 수 있다.
또한 s라는 배열에 1부터 n까지 약수의 합을 모두 더하여 넣어주었다.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
MAX = 1000000;
d = [1]*(MAX+1)
s = [0]*(MAX+1)
for i in range(2, MAX+1):
j = 1
while i*j <= MAX:
d[i*j] += i
j += 1
for i in range(1, MAX+1):
s[i] = s[i-1] + d[i]
t = int(input())
ans = []
for _ in range(t):
n = int(input())
ans.append(s[n])
print('\n'.join(map(str,ans))+'\n')
|
cs |
'PS > Python' 카테고리의 다른 글
| [파이썬] 백준 6588 번 : 골드바흐의 추측 (0) | 2021.02.17 |
|---|---|
| [파이썬] 백준 1929 번 : 소수 구하기 (0) | 2021.02.17 |
| [파이썬] 백준 2609 번 : 최대공약수와 최소공배수 (0) | 2021.02.17 |
| [파이썬] 백준 17427 번 : 약수의 합2 (0) | 2021.02.17 |
| [파이썬] 백준 1037 번 : 약수 (0) | 2021.02.17 |