문제 출처: https://www.acmicpc.net/problem/2312
소인수분해의 전형적인 코드라고할 수 있습니다.
알고리즘은 다음과 같습니다.
m이 2부터시작하므로 n을 최대한 m으로 소인수분해하고 끝났을 때 m과 m으로 소인수분해한 횟수를 출력하고
n이 1될 때 까지(소인수분해가 끝날 때까지) m++하고 cnt=0으로 초기화하여 다시 소인수분해합니다.
n이 1일때 소인수분해가 끝난다는 것을 이용하면 쉽게풀 수 있습니다.
#include<iostream> using namespace std; int main() { int n, t; cin >> t; while (t--) { int cnt = 0; cin >> n; //소인수분해를 시작할 값m-> n으로 m부터나누겠다. int m = 2; while (1) { //n=6 m=2; if (n % m == 0) { n /= m; cnt++; } //45행 마치고 n=3, m=2; else { if (cnt > 0) cout << m << " " << cnt << endl; //n==1일떄 소인수분해 끝난거라 break; if (n == 1) break; //m=2의경우 소인수분해끝나서 m초기화시킴 cnt = 0; m++; } } } }
'문제풀이(BOJ) > 수학' 카테고리의 다른 글
[백준2502] 떡 먹는 호랑이 (0) | 2019.12.18 |
---|---|
모르면 못푸는 수학 공식들(계속 수정) (0) | 2019.12.11 |
[백준 9366] 삼각형 분류 (0) | 2019.12.06 |
숫자N을 거꾸로 만들기 (0) | 2019.12.03 |
[백준 2153] 소수 단어 (0) | 2019.12.02 |