[백준 문제풀이 - 정수론] 11653_소인수분해 (C++)

2022. 4. 2. 22:58

문제

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

입력

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

출력

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


문제 이해

1. 정수 입력 받기

2. N보다 작은 소인수 찾기

3. 소인수분해 + 바로 출력

4. 남은 값 출력

 

풀이 과정

소인수 분해가 되는 것인지 판단은 ?

1. 어떤 수로 나눴을 때 원래 값과 몫이 다를 때

2. n을 i로 나눴을 때 나머지가 0 (선택)


코드

#include <iostream>
using namespace std;

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);

    int n;      // 정수 N (1 ≤ N ≤ 10,000,000)
    int decomposed_n;

    cin >> n;
    decomposed_n = n;

    // 사실 작은 수부터 나누면 소수가 아닌 수가 나눌게 없어지니 쭉 돌리자
    for (int i = 2; i*i <= n; ) {
        if (decomposed_n % i == 0) {
            cout << i << endl;
            decomposed_n /= i;
        } else {
            i++;
        }
    }

    if (decomposed_n != 1) {
        cout << decomposed_n;
    }

    return 0;
}

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

 

11653번: 소인수분해

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

www.acmicpc.net

 

'Baekjoon > 문제 풀이' 카테고리의 다른 글

[CodeForces Round #784] B. Triple (C++)  (0) 2022.05.01
[CodeForces Round #784] A. Division? (C++)  (0) 2022.05.01
[2021 SCPC] 2. 이진수  (0) 2021.07.17
[SCPC 2021] 1. 친구들  (0) 2021.07.16
[백준 문제풀이] 2164_카드2 (C++)  (0) 2021.07.14

BELATED ARTICLES

more