728x90
C가 A의 약수라면, A/C도 A의 약수가 되어야 한다. 또 C가 A/C인 경우도 있는데, 이때는 A = C^2이라는 수식이 성립하는 경우이다.
따라서 약수를 구할때, 루트 A를 까지 구한 다음, 모든 약수를 구하여 시간복잡도를 줄일 수 있다. 왜냐하면, A만큼 나누어 보는 것이 아니라, 루트 A까지 약수를 구하기 때문에 O(N) > O(루트N)이 되기 때문이다.
Example 1)
https://www.acmicpc.net/problem/1037
1037번: 약수
첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되
www.acmicpc.net
문제 해결)
N의 진짜 약수의 최소와 최대를 곱하면 항상 N이 나오게 된다.
정답)
n = int(input())
a = list(map(int,input().split()))
print(min(a)*max(a))
728x90
'코딩테스트' 카테고리의 다른 글
소수 - 백준 1978 [Python] (0) | 2021.07.16 |
---|---|
최대공약수/최소공배수 - 백준 2609 [Python] (0) | 2021.07.16 |
약수의 합 - 백준 17425 [Python] (0) | 2021.07.15 |
약수의 합 2 - 백준 17427 [Python] (0) | 2021.07.15 |
나머지 연산 - 백준 4375번 [Python] (0) | 2021.07.15 |
댓글