문제 : https://www.acmicpc.net/problem/11653
정수 N을 소인수분해하는 문제.
import sys
input = sys.stdin.readline
# 분해
def divide(N, div):
while(N%div==0): # 나누어떨어질 시 반복
print(div)
N /= div # N을 i로 나누기
return N
# 소수 찾기
def prime(N):
for i in range(2, N+1):
if(N%i==0): # N을 분해할 수 있는 소수이면
N = divide(N, i) # 찾은 소수로 분해
if(i >= N): # i가 현재 분해된 N보다 커지면
break # 종료
N = int(input()) # 숫자 N
primes = prime(N) # N의 소수
[문제풀이]
일반적으로 소인수분해란 더 이상 나누어질 수 없는 작은 수로 분해한다는 뜻이다.

여기서 분해되는 2와 3은 소수다.
즉, 소인수분해로 나누어지는 모든 수는 1과 자기 자신 외에는 분해될 수 없는 수, 소수다.
그럼 소인수 분해를 하려면 일단 소수를 구하고, 그 소수 중 N을 분해할 수 있는 수를 찾아 분해해야 하는데....
파이썬은 느려서, 시간 초과가 난다.
그래서 밑의 블로그를 참조, 소수를 구하는 과정과 소인수 분해를 하는 과정을 섞었다.
소수를 찾을 때 N이 그 소수로 나누어 떨어진다면 바로 N을 분해하는 방식으로!
참고 : https://blog.naver.com/pcw3261/223439020084
'코딩테스트 > 백준' 카테고리의 다른 글
| [백준] 1463번 : 1로 만들기 (Python) (0) | 2024.12.27 |
|---|---|
| [백준] 1197번 : 최소 스패닝 트리 (Python) (0) | 2024.12.27 |
| [백준] 11576번 : Base Conversion (Python) (1) | 2024.12.27 |
| [백준] 2745번 : 진법 변환 (Python) (2) | 2024.12.27 |
| [백준] 11005번 : 진법 변환 2 (Python) (0) | 2024.12.27 |