[백준 문제풀이 - 정수론] 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 |