문제
정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오.
입력
첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.
출력
N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. N이 1인 경우 아무것도 출력하지 않는다.
예제 입력 1
72
예제 출력 1
2
2
2
3
3
예제 입력 2
3
예제 출력 2
3
예제 입력 3
6
예제 출력 3
2
3
예제 입력 4
2
예제 출력 4
2
예제 입력 5
9991
예제 출력 5
97
103
v = int(input())
i = 2
while v != 1:
if v % i == 0:
v = v / i
print(i)
else:
i += 1
위와 같이 while을 통해 푸는 방법이 있고
num = int(input())
while num != 1: # 전부 분해가 될 때까지 loop
for i in range(2, num + 1):
if (num % i == 0):
# 나눠지면 출력
# 다음을 위해 해당 수로 num을 나눠준다.
print(i)
num = num // i
break
알았던 내용
입력된 수를 2~9까지의 수 중 나눠지는 것으로 최대한 나누는 것까지 구현이 가능했다.
몰랐던 내용
아쉬운 점은 입력 값을 절반으로 나누는 것까지는 했지만, 절반으로 나눈 상태에서 가능한한 해당 수로 나누도록 하는 방법,
그리고 그 이상의 숫자로 나누는 방법 그리고 최대치까지 나누기 등의 연쇄방식 코드 구현에는 어려움이 있었다.
배운 내용
글로벌 변수를 지정한 뒤 값에 적용하는 방법이 있고, 반복문을 통해 자연히 하나씩 증가시켜 계산하는 방법이 있다.
계산된 값에서 계산한 방식 그대로 다시 한번 더 계산하는 과정, 그리고 계산이 더이상 안될 때 다른 수로 다시 전과같은
계산방식을 이어가는 것이 바로 여기서 배울 수 있는 점이었다.