import
java.util.*;
class
GFG{
static
int
MAX =
10000
;
static
ArrayList<Object> primes =
new
ArrayList<Object>();
static
void
sieveSundaram()
{
boolean
[]marked =
new
boolean
[MAX /
2
+
1
];
Arrays.fill(marked,
false
);
for
(
int
i =
1
;
i <= (Math.sqrt(MAX) -
1
) /
2
; i++)
for
(
int
j = (i * (i +
1
)) <<
1
;
j <= MAX /
2
;
j = j +
2
* i +
1
)
marked[j] =
true
;
primes.add(
2
);
for
(
int
i =
1
; i <= MAX /
2
; i++)
if
(marked[i] ==
false
)
primes.add(
2
* i +
1
);
}
static
int
LSCPUtil(
int
limit,
long
[]sum_prime)
{
int
max_length = -
1
;
int
prime_number = -
1
;
for
(
int
i =
0
; (
int
)primes.get(i) <= limit; i++)
{
for
(
int
j =
0
; j < i; j++)
{
if
(sum_prime[i] - sum_prime[j] >
limit)
break
;
long
consSum = sum_prime[i] -
sum_prime[j];
Object[] prime = primes.toArray();
if
(Arrays.binarySearch(
prime, (
int
)consSum) >=
0
)
{
if
(max_length < i - j +
1
)
{
max_length = i - j +
1
;
prime_number = (
int
)consSum;
}
}
}
}
return
prime_number;
}
static
void
LSCP(
int
[]arr,
int
n)
{
sieveSundaram();
long
[]sum_prime =
new
long
[primes.size() +
1
];
sum_prime[
0
] =
0
;
for
(
int
i =
1
; i <= primes.size(); i++)
sum_prime[i] = (
int
)primes.get(i -
1
) +
sum_prime[i -
1
];
for
(
int
i =
0
; i < n; i++)
System.out.print(LSCPUtil(
arr[i], sum_prime) +
" "
);
}
public
static
void
main(String []arg)
{
int
[]arr = {
10
,
30
,
40
,
50
,
1000
};
int
n = arr.length;
LSCP(arr, n);
}
}