import
java.util.*;
public
class
GFG {
static
int
MAX =
100002
;
static
ArrayList<Integer> primes
=
new
ArrayList<Integer>();
static
HashMap<Integer, Integer> k_cnt
=
new
HashMap<Integer, Integer>();
static
HashMap<Integer, Integer> current_map
=
new
HashMap<>();
static
ArrayList<HashMap<Integer, Integer> > cnts
=
new
ArrayList<HashMap<Integer, Integer> >();
static
void
sieve()
{
ArrayList<Integer> prime =
new
ArrayList<Integer>();
for
(
int
i =
0
; i < MAX; i++)
prime.add(
0
);
prime.set(
0
,
1
);
prime.set(
1
,
1
);
for
(
int
i =
2
; i < MAX; i++) {
if
(prime.get(i) ==
0
) {
for
(
int
j = i *
2
; j < MAX; j += i) {
if
(prime.get(j) ==
0
) {
prime.set(j, i);
}
}
}
}
for
(
int
i =
2
; i < MAX; i++) {
if
(prime.get(i) ==
0
) {
prime.set(i, i);
primes.add(i);
}
}
}
static
int
countSubarrays(
int
[] arr,
int
n,
int
k)
{
if
(k ==
1
) {
System.out.println(
(
int
)((
1
* n * (n +
1
)) /
2
));
return
0
;
}
ArrayList<Integer> k_primes
=
new
ArrayList<Integer>();
for
(Integer p : primes) {
while
(k % p ==
0
) {
k_primes.add(p);
k /= p;
}
}
if
(k >
1
) {
k_primes.add(k);
}
for
(Integer num : k_primes) {
if
(!k_cnt.containsKey(num))
k_cnt.put(num,
0
);
k_cnt.put(num, k_cnt.get(num) +
1
);
}
int
l =
0
;
int
r =
0
;
int
ans =
0
;
while
(r < n) {
for
(Map.Entry<Integer, Integer> entry :
k_cnt.entrySet()) {
int
it = entry.getKey();
int
p = entry.getValue();
while
(arr[r] % p ==
0
) {
if
(!current_map.containsKey(p))
current_map.put(p,
0
);
current_map.put(p,
current_map.get(p) +
1
);
HashMap<Integer, Integer> h1
= cnts.get(r);
if
(!h1.containsKey(p)) {
h1.put(p,
0
);
cnts.set(r, h1);
}
h1.put(p, h1.get(p) +
1
);
cnts.set(r, h1);
arr[r] = (
int
)(arr[r] / p);
}
}
int
flag =
0
;
for
(Map.Entry<Integer, Integer> entry :
k_cnt.entrySet()) {
int
it = entry.getKey();
int
p = entry.getValue();
if
(current_map.get(p) < k_cnt.get(p)) {
flag =
1
;
break
;
}
}
if
(flag ==
0
) {
ans += n - r;
for
(Map.Entry<Integer, Integer> entry :
k_cnt.entrySet()) {
int
it = entry.getKey();
int
p = entry.getValue();
p = it;
current_map.put(
p, current_map.get(p)
- cnts.get(l).get(p));
}
l++;
}
else
{
r++;
}
}
return
ans;
}
public
static
void
main(String[] args)
{
for
(
int
i =
0
; i < MAX; i++)
cnts.add(
new
HashMap<Integer, Integer>());
int
[] arr = {
6
,
2
,
8
};
int
n = arr.length;
int
k =
4
;
sieve();
System.out.println(countSubarrays(arr, n, k));
}
}