본문 바로가기

알고리즘

[백준] 11653번 :소인수분해 - Python 파이썬

[백준] 11653번 :소인수분해 - Python 파이썬

 

알고리즘 분류:

 

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

 

11653번: 소인수분해

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

www.acmicpc.net

 


문제

정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오.

입력

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

출력

N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. N이 1인 경우 아무것도 출력하지 않는다.

 

 


제출한 답

T = int(input())
#T가 1이 될때까지 인수로 나눈다
while T != 1:
for i in range(2,int(T**0.5)+1):
if T % i == 0:
T = T//i
print(i)
break
#나눠지는 인수가 1 이외에 없을 때 종료
else:
print(T)
break

인수를 빠르게 확인하기 위해

T의 제곱근까지만 for문을 돌렸다.

T//2와 비교해 시간이 636ms에서 84ms까지 단축됐다.

 

T = int(input())
i = 2
while T != 1:
if i <= T**0.5:
if T % i == 0:
T = T//i
print(i)
i = 2
else:
i += 1
else:
print(T)
break

for문을 사용하지 않는 답. 위와 시간은 비슷하다.(76ms)

이게 최적의 답안이지만 먼가 긱한 느낌..

 

N = int(input())
m = 2
while N!=1:
if N%m==0:
print(m)
N = N//m
else:
m += 1

제일 간편한 답.

하지만 시간이 오래걸린다.(1600ms)