import
java.util.*;
class
GFG
{
static
boolean
[] SieveOfEratosThenes(
int
max_val)
{
boolean
[] prime =
new
boolean
[max_val +
1
];
Arrays.fill(prime,
true
);
for
(
int
p =
2
; p * p <= max_val; p++)
{
if
(prime[p])
{
for
(
int
i = p *
2
; i <= max_val; i += p)
prime[i] =
false
;
}
}
return
prime;
}
static
void
compositeSumAndProduct(Integer[] arr,
int
n,
int
k)
{
int
max_val = Collections.max(Arrays.asList(arr));
boolean
[] prime = SieveOfEratosThenes(max_val);
prime[
0
] =
true
;
prime[
1
] =
true
;
PriorityQueue<Integer> maxHeap =
new
PriorityQueue<Integer>((x, y) -> y - x);
PriorityQueue<Integer> minHeap =
new
PriorityQueue<>();
for
(
int
i =
0
; i < n; i++)
{
if
(!prime[arr[i]])
{
minHeap.add(arr[i]);
maxHeap.add(arr[i]);
}
}
long
minProduct =
1
, maxProduct =
1
,
minSum =
0
, maxSum =
0
;
Integer lastMin =
0
, lastMax =
0
;
while
(k-- >
0
)
{
if
(minHeap.peek() !=
null
||
maxHeap.peek() !=
null
)
{
minProduct *= minHeap.peek();
maxProduct *= maxHeap.peek();
minSum += minHeap.peek();
maxSum += maxHeap.peek();
lastMin = minHeap.poll();
lastMax = maxHeap.poll();
}
else
{
minProduct *= lastMin;
maxProduct *= lastMax;
minSum += lastMin;
maxSum += lastMax;
}
}
System.out.println(
"Sum of k-minimum composite"
+
" numbers is "
+ minSum);
System.out.println(
"Sum of k-maximum composite"
+
" numbers is "
+ maxSum);
System.out.println(
"Product of k-minimum composite"
+
" numbers is "
+ minProduct);
System.out.println(
"Product of k-maximum composite"
+
" numbers is "
+ maxProduct);
}
public
static
void
main(String[] args)
{
Integer[] arr = {
4
,
2
,
12
,
13
,
5
,
19
};
int
n = arr.length;
int
k =
3
;
compositeSumAndProduct(arr, n, k);
}
}