11653번 - 소인수 분해
처음에 코드가 굉장히 헷갈렸다.. 뭔가 어떻게 짜야할지 막막했다.
근데 이전에 소수인지 확인 할때 2부터 나눠서 나누어 떨어지는 지 확인하는 것처럼
소인수 분해라는 것도 결국은 약수로 계속 나눠서 소수를 만드는 것이라 생각하면 됐다.
그래서 소수를 만들기 위해서, 1과 자기 자신 말고는 나누어 떨어지는 수가 없도록 하기 위해 그 외의 나눠질 수 있는 숫자로 계속 나눈다.
그게 바로 소인수 분해가 되는 것이다. 그리고 결국은 1과 자기 자신이 남게 되는데, 1은 소인수 분해에 들어가지 않으므로
자기 자신의 숫자를 if(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 | #include<iostream> using namespace std; int main() { int N; cin >> N; for (int i = 2; i*i <= N; i++) { while (N % i == 0) { printf("%d\n", i); N /= i; } } if (N > 1) { printf("%d\n", N); } return 0; } | cs |
반응형