BOJ-Algorithm
백준 11653 - 소인수분해
bellhundred
2022. 2. 9. 10:30
https://www.acmicpc.net/problem/11653
11653번: 소인수분해
첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.
www.acmicpc.net
import sys
input = sys.stdin.readline
n = int(input().strip())
while n!=1:
for i in range(2, n+1):
if n%i==0:
print(i)
n = n//i
break
n을 입력받고 n이 1이 될 때까지 반복해서 2이상의 수로 나누는 방식이다. brute force하게 하나하나 일일이 다 대입해보는 형태의 코드로 작성했는데, 맞긴 했지만 속도가 느리다.
n = int(input())
i = 2
r = int(n ** 0.5)
while i <= r:
while not n % i:
print(i)
n //= i
i += 1
if n > 1:
print(n)
다른 사람의 코드인데, 에라토스테네스의 체를 활용해서 입력받은 수의 제곱근까지만 반복해서 반복의 횟수를 n**0.5로 줄인 좋은 코드다.