본문 바로가기

알고리즘/백준

[백준] 11653번 소인수분해

소인수분해

 

https://www.acmicpc.net/problem/11653

 

11653번: 소인수분해

첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.

www.acmicpc.net

 

풀이

자연수의 약수 중 소수인 수들을 소인수라 한다. ex) 10의 소인수는 2, 3, 5, 7
입력 받은 자연수를 소수로 나눠줘야 한다. 나눠지는 수가 소수인지 판단은 굳이 할 필요는 없다. (4는 2로 나눠지기 때문)
 
 
 
 

최초 제출 코드

N = int(input())

for i in range(1, N+1) :
    for j in range(2, i+1) :
        while True :
            if N == 1 :
                break
            elif N % j == 0 :
                N = N / j
                print(j)
                if N == 1 :
                    break
            else :
                break
 
해당 코드 제출 시 시간 초과가 났다.

나누려는 수가 소수인지 검증하는 for문은 굳이 필요가 없다.

 
 

 

정답

N = int(input())

i = 2
while True :
    if N == 1 :
        break 
    elif N % i == 0 :
        N = N / i
        print(i)
    else :
        i += 1

 

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 17103 골드바흐 파티션  (0) 2024.03.26
[백준] 1735번 베르트랑 공준  (0) 2024.03.20
[백준] 4134번 다음 소수  (0) 2024.03.19
[백준] 1735번 분수 합  (0) 2024.03.13
[백준] 1934번 최소공배수  (1) 2024.03.13