본문 바로가기
카테고리 없음

[백준 11653번] '케이원' 파이썬(python) 수학 I 소인수분해

by MD.Kang 2021. 4. 27.

문제

정수 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까지의 수 중 나눠지는 것으로 최대한 나누는 것까지 구현이 가능했다.

 

몰랐던 내용

아쉬운 점은 입력 값을 절반으로 나누는 것까지는 했지만, 절반으로 나눈 상태에서 가능한한 해당 수로 나누도록 하는 방법,

그리고 그 이상의 숫자로 나누는 방법 그리고 최대치까지 나누기 등의 연쇄방식 코드 구현에는 어려움이 있었다. 

 

배운 내용

글로벌 변수를 지정한 뒤 값에 적용하는 방법이 있고, 반복문을 통해 자연히 하나씩 증가시켜 계산하는 방법이 있다. 

계산된 값에서 계산한 방식 그대로 다시 한번 더 계산하는 과정, 그리고 계산이 더이상 안될 때 다른 수로 다시 전과같은

계산방식을 이어가는 것이 바로 여기서 배울 수 있는 점이었다.