코딩테스트 연습/Baekjoon

[Baekjoon] 11653번 : 소인수 분해 (c++)

수기 2022. 3. 31. 19:45

https://www.acmicpc.net/problem/11653

처음에는 각 수가 소수인지 판별하여, 소수인 수로 나누어서 나머지가0인 수를 모두 출력하는 방법으로 진행했다.
정수 범위가 10,000,000 까지여서 그런지 런타임 에러가 나왔다. 애초에 i=2부터 시작하여 num/i로 나누어지는 i는 모두 소수이기 때문에, 굳이 처음부터 소수를 판별하지 않고 while문 하나로 처리하는 방식으로 변경했다.
→ num을 입력받아서, i를 2이상인 수로 num이 i보다 작아질때까지 반복해서 나누고, 나머지가 0이면 소인수분해 결과 값으로 출력한다.

코드

//11653
#include <iostream>
#include <string>
using namespace std;

int main(int argc, const char * argv[]) {
    cin.tie(NULL);
    ios::sync_with_stdio(0);
    
    int num;
    cin>>num;
    
     int i=2;
    while( num != 1 ){
        
            if(num % i == 0){
                cout << i << "\n";
               num = num / i;
            }
            else i++;
            
    }
        return 0;
}