๐งฉ 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.