For Programmer
백준 14232번 파이썬 문제풀이(보석 도둑) 본문
728x90
이 문제는 간단히 10^12 까지 소인수 분해를 할 수 있냐를 묻는 문제이다. 그러나 O(N)으로는 못돈다. 따라서 최적화된 소인수 분해 코드를 짜야하는데 O(logN) 으로 구할 수 있는 소인수 분해 식이 있다.
예를들어 어떤 n의 소인수 분해는
a*b*c*d*e*f*g*h*i => n
다음과 같이 표현이 가능하다. 여기서 중요한 점은 a~i 까지의 수중에 sqrt(N)보다 큰 수는 많아봐야 1개(i) 이거나 없다.(제곱수 일때) 따라서 이러한 점을 이용해서 식을 짜면 된다.
K = int(input())
# 소인수 분해 최적화(logN)
def prime(k):
x = k
arr = []
for i in range(2, k):
if i * i > k:
break
while x % i == 0:
arr.append(i)
x //= i
if x != 1: # 만약 제곱수가 아니라면
arr.append(x) # 마지막 남은 수를 추가해준다.
return arr
arr = prime(K)
print(len(arr))
print(*arr)
728x90
'코팅테스트 > 백준 문제 모음' 카테고리의 다른 글
백준 2108번 파이썬 문제풀이(통계학) (0) | 2022.02.22 |
---|---|
swea 13549번 파이썬 문제풀이(최대공약수의 최대화) (0) | 2022.02.21 |
백준 7806번 파이썬 문제풀이(GCD!) (0) | 2022.02.20 |
백준 2436번 파이썬 문제풀이(공약수) (0) | 2022.02.19 |
백준 4408번 파이썬 문제풀이(자기 방으로 돌아가기) (0) | 2022.02.18 |
Comments