π§© 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.