소인수분해란 1보다 큰 자연수를 소수들만의 곱으로 나타내는 것이다.
입력받은 수가 소수로 나눠떨어질 때마다 그 소수를 출력해주면 되는데,
처음엔 2부터 입력받은 수 사이의 소수를 다 구한다음 그 소수로 나눠봐야 하나??싶었다.
하지만 좀 더 고민해보니 그럴 필요가 없다는 걸 알게 됐다.
소수가 아닌 수는 합성수인데, 합성수는 둘 이상의 소수를 곱한 수이므로 소수들로 쪼갤 수 있다.
그러니 2부터(1은 소수가 아니니 제외) 입력받은 수까지 1씩 증가시켜나가면서 입력받은 수를 나누다보면
자연스럽게 소수들로 쪼개지는 것이다.
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
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());
for(int i=2;i<=N;i++){
while(N%i==0){
System.out.println(i);
N /= i;
}
}
}
}
'[BOJ] - JAVA' 카테고리의 다른 글
[백준] 4948 : 베르트랑 공준 JAVA 풀이 (0) | 2022.05.19 |
---|---|
[백준] 1929 : 소수 구하기 JAVA 풀이 (0) | 2022.05.19 |
[백준] 2581 : 소수 JAVA 풀이 (0) | 2022.05.18 |
[백준] 1978 : 소수 찾기 JAVA 풀이 (0) | 2022.05.18 |
[백준] 2775 : 부녀회장이 될 테야 JAVA 풀이 (0) | 2022.05.17 |