Post

๐Ÿงฉ Baekjoon 11653 - ์†Œ์ธ์ˆ˜๋ถ„ํ•ด

๐Ÿงฉ Baekjoon 11653 - ์†Œ์ธ์ˆ˜๋ถ„ํ•ด

๋ฌธ์ œ

์ •์ˆ˜ N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์†Œ์ธ์ˆ˜๋ถ„ํ•ดํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ •์ˆ˜ N (1 โ‰ค N โ‰ค 10,000,000)์ด ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

N์˜ ์†Œ์ธ์ˆ˜๋ถ„ํ•ด ๊ฒฐ๊ณผ๋ฅผ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•œ๋‹ค. N์ด 1์ธ ๊ฒฝ์šฐ ์•„๋ฌด๊ฒƒ๋„ ์ถœ๋ ฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

์˜ˆ์ œ

โœ… ์ž…๋ ฅ 1

1
72

โœ… ์ถœ๋ ฅ 1

1
2
3
4
5
2
2
2
3
3

โœ… ์ž…๋ ฅ 2

1
3

โœ… ์ถœ๋ ฅ 2

1
3

โœ… ์ž…๋ ฅ 3

1
9991

โœ… ์ถœ๋ ฅ 3

1
2
97
103

์ž‘์„ฑ ์ฝ”๋“œ

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.util.Arrays;  
  
public class Main {  
    static int[] primeArr;  
    
    public static void main(String[] args) throws IOException {  
        // 1. ๋ณ€์ˆ˜ ์„ ์–ธ ๋ฐ ์ดˆ๊ธฐํ™”  
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
        int n = Integer.parseInt(br.readLine());  
        
        // 2. ์ฒ˜๋ฆฌ ๋ฐ ์ถœ๋ ฅ  
        makePrimeArr(n);  
        factorize(n);  
    }  
    
    static void makePrimeArr(int num) {  
        // ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”  
        primeArr = new int[num + 1];  
        Arrays.fill(primeArr, 1);  
        primeArr[0] = primeArr[1] = 0;  
        
        // ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด  
        for (int i = 2; i <= num; i++) {  
            if (primeArr[i] == 0) continue;  
            for (int j = i * 2; j <= num; j += i) primeArr[j] = 0;  
        }  
    }  
    
    static void factorize(int n) {  
        // ์ˆœํšŒ ์ฒ˜๋ฆฌ  
        for (int i = 2; i <= n; i++) {  
            // ์†Œ์ˆ˜์ผ ๊ฒฝ์šฐ ๊ฐ€๋Šฅํ•  ๋•Œ๊นŒ์ง€ ๋‚˜๋ˆ—์…ˆ ์ฒ˜๋ฆฌ  
            if (primeArr[i] == 1) {  
                while (n % i == 0) {  
                    System.out.println(i);  
                    n /= i;  
                }  
            }  
            
            // ์ข…๋ฃŒ ์ฒ˜๋ฆฌ  
            if (n == 1) break;  
        }  
    }  
}

ํšŒ๊ณ 

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
    static int[] primeArr;
    
    public static void main(String[] args) throws IOException {
        // 1. ๋ณ€์ˆ˜ ์„ ์–ธ ๋ฐ ์ดˆ๊ธฐํ™”
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        
        // 2. ์ฒ˜๋ฆฌ ๋ฐ ์ถœ๋ ฅ
        makePrimeArr(n);
        factorize(n);
    }
    
    static void makePrimeArr(int num) {
        // ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”
        primeArr = new int[num + 1];
        Arrays.fill(primeArr, 1);
        primeArr[0] = primeArr[1] = 0;
        
        // ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด
        for (int i = 2; i <= num; i++) {
            if (primeArr[i] == 0) continue;
            for (int j = i * 2; j <= num; j += i) primeArr[j] = 0;
        }
    }
    
    static void factorize(int n) {
        // ์ˆœํšŒ ์ฒ˜๋ฆฌ
        for (int i = 2; i * i <= n; i++) {
            // ์†Œ์ˆ˜์ผ ๊ฒฝ์šฐ ๊ฐ€๋Šฅํ•  ๋•Œ๊นŒ์ง€ ๋‚˜๋ˆ—์…ˆ ์ฒ˜๋ฆฌ
            if (primeArr[i] == 1) {
                while (n % i == 0) {
                    System.out.println(i);
                    n /= i;
                }
            }
        }
        
        // n์ด 1๋ณด๋‹ค ํฌ๋ฉด ์†Œ์ˆ˜์ด๋ฏ€๋กœ ์ถœ๋ ฅ
        if (n > 1) {
            System.out.println(n);
        }
    }
}
  • ์œ„ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ œ๊ณฑ๊ทผ๊นŒ์ง€๋งŒ ์ฒ˜๋ฆฌํ•ด๋ณด๊ธฐ๋„ ํ–ˆ๋Š”๋ฐ i * i ์—ฐ์‚ฐ ๋•Œ๋ฌธ์ธ์ง€ ์˜คํžˆ๋ ค ์†๋„๊ฐ€ ๋А๋ ค์กŒ๋‹ค.
  • ๊ทธ๋Ÿผ์—๋„ ์ž…๋ ฅ ๊ฐ’์ด ํฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ๋งŽ์•„์ง„๋‹ค๋ฉด ์ œ๊ณฑ๊ทผ๊นŒ์ง€๋งŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด ๋” ์œ ๋ฆฌํ•  ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.
This post is licensed under CC BY 4.0 by the author.