BOJ

백준 11653 - 소인수분해

yanJuicy 2019. 8. 23. 18:56
반응형

문제

 

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

 

11653번: 소인수분해

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

www.acmicpc.net

 

 

풀이

 

소인수분해는 소수들의 곱을 이용해서 정수를 나타내는 방법이다.

 

https://ko.wikipedia.org/wiki/%EC%86%8C%EC%9D%B8%EC%88%98%EB%B6%84%ED%95%B4

 

소인수분해 - 위키백과, 우리 모두의 백과사전

 

ko.wikipedia.org

 

N 보다 작은 소수들을 먼저 구하려고 했지만 그럴 필요가 없는 문제이다.

 

소수가 아닌 수들은 결국 앞에 나온 소수들의 곱으로 이루어지게 되므로, N을 2부터 시작해서 나누었을 때 나머지가 없으면 그 수는 N을 이루는 소수가 된다.

 

예를 들어 N = 80의 경우

80 % 2 = 0 -> N = 40,

40 % 2 = 0 -> N = 20,

20 % 2 = 0 -> N = 10,

10 % 2 = 0 -> N = 5,

5 % 2 = 1 -> N = 5,

5 % 3 = 2 -> N =5,

5 % 4 (4는 2*2 로 표현되므로 건너뜀, 2로 나눌 때 이미 계산이 끝난 경우)

5 % 5 = 0 -> N = 1

 

이렇게 N = 1 이 되면 소인수분해가 종료된다.

 

 

코드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
 
using namespace std;
 
int N;
 
int main()
{
    cin.tie(0);
    ios::sync_with_stdio(0);
 
    cin >> N;
 
    if (N == 1return 0;
 
    int tmp = 2;
    while (N != 1)
    {
        if (N % tmp) tmp++;
        else
        {
            N /= tmp;
            cout << tmp << '\n';
        }
    }
 
    return 0;
}
 
cs

 

 

반응형

'BOJ' 카테고리의 다른 글

백준 4963 - 섬의 개수  (0) 2019.09.02
백준 2667 - 단지번호붙이기  (0) 2019.08.29
백준 2745 - 진법 변환  (0) 2019.08.22
백준 11657 - 타임머신  (0) 2019.08.21
백준 9466 - 텀 프로젝트  (0) 2019.08.19