본문 바로가기

알고리즘

[백준 알고리즘 c++] 문제 16. 소인수분해 11653

반응형

문제
정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오.

입력
첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.

출력
N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. N이 1인 경우 아무것도 출력하지 않는다.

내 풀이)

#include <iostream>

using namespace std;

int main()
{
	//
	// 문제
	// 1. 정수 n이 주어졌을때 소인수분해하는 프로그램 만들기
	// 입력
	// 1. 정수 n을 입력받는다. 
	int N = 0;
	cin >> N;
	// 처리
	// 1. N이 양수일때 반복문을 돌려준다.
	//1-1. cal을 반복문으로 늘려주면서 나눠질때  
	//1-1-1. N을 나눈값으로 가지게 하고 cal을 다시 초기화 해줌으로써 인수분해 될수있도록 처리한다.
	int cal = 2;
	while (N > 1)
	{
		if (N % cal == 0)
		{
			N = N / cal;
			cout << cal << endl;

			cal = 2;
		}
		else {
			cal++;
		}
	}
	// 2. 
	// 출력
	//
	

	return 0;
}

문제점 : 소인수 분해 할때 소인수 분해 하는 숫자는 같은 숫자로 소인수 분해 하면 값을 증가 시키지 않고 while문에서 처리할수 있으므로 더욱 간략히 소스를 구현할수있다.

//백준11653 소인수분해
 
#include <iostream>
using namespace std;
 
int main() {
    int N;
    cin >> N;
 
    if (N == 1) return 0;
 
    for (int i = 2; i <= N; i++) {
        while (N % i == 0) {
            cout << i << endl;
            N /= i;
        }
    }
 
}
반응형