Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 30 |
Tags
- PS
- 에라토스테네스의 체
- 삼성 SDS 대학생 알고리즘 특강
- dynamic programming
- 백트래킹
- 그리디
- dfs
- C++
- 알고리즘
- 동적 계획법
- 완전탐색
- 소수
- 스택
- SWEA
- 다이나믹 프로그래밍
- koitp
- 맛집
- 잠실
- sw expert academy
- 백준
- DP
- 해커랭크
- 브루트포스
- Algorithm
- 구현
- BFS
- hackerrank
- 삼성 기출
- BOJ
- 시뮬레이션
Archives
- Today
- Total
펭로그
[C++] 백준 BOJ 11653 소인수분해 본문
문제링크 : https://boj.kr/11653
어떤 숫자의 소인수들은 소수들의 곱으로 표현할 수 있다.
그러기 위해선 입력 숫자의 범위만큼 소수 리스트를 구해서 해당 소수들이 입력 숫자로 나누어 떨어지는지를 계산하고 이를 무한히 반복하여 더이상 나누어 떨어지지 않을 때까지 나누면 된다.
다만, 소수 리스트를 다 구할 필요는 없고 입력 숫자의 제곱근 범위까지만 구하면 된다.
제곱근보다 큰 범위의 숫자를 2개 이상 서로 곱하면 입력 숫자를 초과하기 때문에 더 이상 구할 필요가 없다.
소수 리스트에 속하지 않은 남은 숫자는 무조건 소수이다. (해당 숫자가 소수 리스트의 곱으로 표현되는 순간 소수가 아니다.)
소수 판별은 에라토스테네스의 체를 이용하여 구하면 더 빠르게 구할 수 있다.
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | // BOJ 11653 소인수분해 #include <bits/stdc++.h> using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); // freopen("input.txt", "r", stdin); int input; cin >> input; // 입력이 1일 경우 연산하지 않고 바로 종료 if (input == 1) return 0; // 에라테네스의 체 이용하여 소수 리스트 만들기 // 소수를 판별할 리스트는 최대 input의 루트 값까지 int maxNum = sqrt(input) + 1; vector <bool> isPrime(maxNum + 1, false); vector <int> pnum; for (int i = 2; i <= maxNum; i++) isPrime[i] = true; for (int i = 2; i <= maxNum; i++) { if (isPrime[i]) { pnum.push_back(i); for (int j = i * 2; j <= maxNum; j += i) isPrime[j] = false; } } for (int i = 0; i < pnum.size(); i++) { while (input % pnum[i] == 0) { input /= pnum[i]; cout << pnum[i] << "\n"; } } // 소수 리스트에 없는 수가 남았을 때 == 소수 (자기자신 포함) if (input > 1) cout << input << "\n"; return 0; } | cs |
'Study > PS(Algorithm)' 카테고리의 다른 글
[C++] 백준 BOJ 7576 토마토 (0) | 2018.08.07 |
---|---|
[C++] 백준 BOJ 10026 적록색약 (0) | 2018.08.03 |
1753 (0) | 2018.08.01 |
[C++] 백준 BOJ 1260 DFS와 BFS (0) | 2018.07.31 |
[C++] 백준 BOJ 2960 에라토스테네스의 체 (0) | 2018.07.31 |
Comments