1
+ package DYKA2 .두번째 ;
2
+
3
+ import java .io .BufferedReader ;
4
+ import java .io .IOException ;
5
+ import java .io .InputStreamReader ;
6
+ import java .util .ArrayList ;
7
+ import java .util .Arrays ;
8
+ import java .util .List ;
9
+ import java .util .StringTokenizer ;
10
+
11
+ public class BaekJoon20438 {
12
+ private static final BufferedReader br = new BufferedReader (new InputStreamReader (System .in ));
13
+ private static int [] student ;
14
+ private static boolean [] visited ;
15
+
16
+ public static void main (String [] args ) throws IOException {
17
+
18
+ StringTokenizer st = new StringTokenizer (br .readLine ());
19
+
20
+ int size = Integer .parseInt (st .nextToken ()) + 3 ; // 학생 수
21
+ int sleepStudentSize = Integer .parseInt (st .nextToken ()); // 졸고 있는 학생 수
22
+ int sendCodeSize = Integer .parseInt (st .nextToken ()); // 출석 코드를 보내는 횟수
23
+ int rangeSize = Integer .parseInt (st .nextToken ()); // 주어질 범위의 횟수
24
+
25
+ student = new int [size ];
26
+ visited = new boolean [size ];
27
+
28
+ // 모든 학생은 1 로 마킹해준다.
29
+ Arrays .fill (student , 1 );
30
+ student [0 ] = 0 ;
31
+ student [1 ] = 0 ;
32
+ student [2 ] = 0 ;
33
+
34
+ // 졸고 있는 학생의 번호는 방문처리해준다.
35
+ st = new StringTokenizer (br .readLine ());
36
+ for (int i = 0 ; i < sleepStudentSize ; i ++) {
37
+ visited [Integer .parseInt (st .nextToken ())] = true ;
38
+ }
39
+
40
+ // 출석 문자를 보낸 학생의 배수를 0으로 바꿔준다.
41
+ st = new StringTokenizer (br .readLine ());
42
+ for (int i = 0 ; i < sendCodeSize ; i ++) {
43
+ int number = Integer .parseInt (st .nextToken ());
44
+
45
+ if (visited [number ]) continue ;
46
+
47
+ for (int j = number ; j < size ; j += number ) {
48
+ if (visited [j ]) continue ;
49
+ student [j ] = 0 ;
50
+ }
51
+
52
+ }
53
+
54
+ // 학생 누적합 구하기
55
+ int [] sum = new int [size ];
56
+ for (int i = 3 ; i < size ; i ++) {
57
+ sum [i ] = sum [i - 1 ] + student [i ];
58
+ }
59
+
60
+ // 범위의 결과값 출력하기
61
+ for (int i = 0 ; i < rangeSize ; i ++) {
62
+ st = new StringTokenizer (br .readLine ());
63
+ int startIndex = Integer .parseInt (st .nextToken ());
64
+ int endIndex = Integer .parseInt (st .nextToken ());
65
+
66
+ System .out .println (sum [endIndex ] - sum [startIndex - 1 ]);
67
+ }
68
+
69
+ }
70
+
71
+ }
0 commit comments