정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오.
첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.
N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. N이 1인 경우 아무것도 출력하지 않는다.
72
2
2
2
3
3
정수 N을 입력받은 후 2부터 차례대로 나누어 떨어지는지 확인함.
2로 나누어 떨어지는 경우 N을 2로 나누고 2를 한번 출력한다.
그리고 또 다시 2로 나누어 떨어지는지 확인하기 위해 반복문을 다시 시작한다. (break)
→ 만약 2로 다 나누어 떨어지고 나면, 이후에 나오는 2의 배수(4, 6, 8..)로도 더 이상 나누어지지 않을테니 자동으로 무시됨.
그 후에는 3으로 같은 과정을 반복하여 N이 1이 될때 까지 반복함.
#include <iostream>
using namespace std;
int main(void)
{
int N;
cin >> N;
if (N == 1) return 0;
while (N > 1)
{
// 2부터 나누어 떨어지는지 확인
for (int i = 2; i <= N; i++) {
// 나누어 떨어지면?
if (N % i == 0) {
N /= i;
cout << i << "\n";
break; // 나누고 i를 출력한 뒤 다시 반복문 시작
}
}
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
if (N == 1) return;
while (N > 1)
{
// 2부터 나누어 떨어지는지 확인
for (int i = 2; i <= N; i++) {
// 나누어 떨어지면?
if (N % i == 0) {
N /= i;
System.out.println(i);
break; // 나누고 i를 출력한 뒤 다시 반복문 시작
}
}
}
}
}