반응형
문제
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 == 1) return 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 |