File tree 1 file changed +58
-0
lines changed
1 file changed +58
-0
lines changed Original file line number Diff line number Diff line change
1
+ import java .io .*;
2
+ import java .util .*;
3
+
4
+ public class Main {
5
+
6
+ public static final int MAX = 1299710 ;
7
+
8
+ public static void main (String [] args ) throws IOException {
9
+ BufferedReader br = new BufferedReader (new InputStreamReader (System .in ));
10
+ List <Integer > primeNumber = getPrimeNumber ();
11
+ int T = Integer .parseInt (br .readLine ());
12
+ for (int i = 0 ; i < T ; i ++) {
13
+ int num = Integer .parseInt (br .readLine ());
14
+ if (num == 1 ) {
15
+ System .out .println ('0' );
16
+ continue ;
17
+ }
18
+ binarySearch (primeNumber , num );
19
+ }
20
+ }
21
+
22
+ public static void binarySearch (List <Integer > primeNumber , int num ) {
23
+ int left = 0 ;
24
+ int right = primeNumber .size () - 1 ;
25
+ while (left <= right ) {
26
+ int mid = (left + right ) / 2 ;
27
+ int primeNum = primeNumber .get (mid );
28
+ if (num <= primeNum ) {
29
+ right = mid - 1 ;
30
+ if (num == primeNum ) {
31
+ System .out .println ('0' );
32
+ return ;
33
+ }
34
+ } else {
35
+ left = mid + 1 ;
36
+ }
37
+ }
38
+ int answer = primeNumber .get (left ) - primeNumber .get (left - 1 );
39
+ System .out .println (answer );
40
+ }
41
+
42
+ public static List <Integer > getPrimeNumber () {
43
+ boolean [] check = new boolean [MAX ];
44
+ List <Integer > primeNumber = new ArrayList <>();
45
+ for (int i = 2 ; i < MAX ; i ++) {
46
+ if (check [i ]) {
47
+ continue ;
48
+ }
49
+ primeNumber .add (i );
50
+ for (int j = i ; j < MAX ; j += i ) {
51
+ if (!check [j ]) {
52
+ check [j ] = true ;
53
+ }
54
+ }
55
+ }
56
+ return primeNumber ;
57
+ }
58
+ }
You can’t perform that action at this time.
0 commit comments