import
java.util.*;
class
GFG {
public
static
boolean
prime[];
public
static
int
maximumElement(
int
arr[],
int
N)
{
int
max = arr[
0
];
for
(
int
i =
0
; i < N; i++) {
if
(max < arr[i]) {
max = arr[i];
}
}
return
max;
}
public
static
void
sieveOfEratosthenes(
int
max)
{
prime =
new
boolean
[max +
1
];
Arrays.fill(prime,
true
);
for
(
int
p =
2
; p * p < max; p++)
if
(prime[p] ==
true
)
for
(
int
i = p *
2
; i < max; i += p)
prime[i] =
false
;
}
public
static
int
divCount(
int
n)
{
int
total =
1
;
for
(
int
p =
2
; p <= n; p++) {
if
(prime[p]) {
int
count =
0
;
if
(n % p ==
0
) {
while
(n % p ==
0
) {
n = n / p;
count++;
}
total = total * (count +
1
);
}
}
}
return
total;
}
public
static
int
countElements(
int
arr[],
int
N,
int
K)
{
Map<Integer, Integer> map
=
new
HashMap<Integer, Integer>();
for
(
int
i =
0
; i < N; i++) {
if
(!map.containsKey(arr[i])) {
map.put(arr[i], divCount(arr[i]));
}
}
int
count =
0
;
for
(
int
i =
0
; i < N; i++) {
if
(map.get(arr[i]) == K) {
count++;
}
}
return
count;
}
public
static
void
main(
String[] args)
{
int
arr[] = {
3
,
6
,
2
,
9
,
4
};
int
N = arr.length;
int
K=
2
;
int
max = maximumElement(arr, N);
sieveOfEratosthenes(max);
System.out.println(countElements(arr, N, K));
}
}