using
System;
using
System.Collections.Generic;
public
class
GFG {
public
static
int
Max = 100001;
static
int
[] spf =
new
int
[Max];
public
static
void
sieve()
{
for
(
int
i = 1; i < Max; i++)
spf[i] = i;
for
(
int
i = 4; i < Max; i = i + 2)
spf[i] = 2;
for
(
int
i = 3; i * i < Max; i++)
if
(spf[i] == i) {
for
(
int
j = i * i; j < Max; j = j + i) {
if
(spf[j] == j)
spf[j] = i;
}
}
}
public
static
int
maximumDPF(
int
[] arr,
int
n,
int
k)
{
sieve();
int
ans = 0, num, currentCount;
var
maps =
new
Dictionary<
int
,
int
>();
for
(
int
i = 0; i < k; i++) {
num = arr[i];
while
(num != 1) {
maps.TryGetValue(spf[num],
out
currentCount);
maps[spf[num]] = currentCount + 1;
num = num / spf[num];
}
}
ans = Math.Max(maps.Count, ans);
for
(
int
i = k; i < n; i++) {
num = arr[i - k];
while
(num != 1) {
maps.TryGetValue(spf[num],
out
currentCount);
maps[spf[num]] = currentCount - 1;
if
(maps[spf[num]] == 0)
maps.Remove(spf[num]);
num = num / spf[num];
}
num = arr[i];
while
(num != 1) {
maps.TryGetValue(spf[num],
out
currentCount);
maps[spf[num]] = currentCount + 1;
num = num / spf[num];
}
ans = Math.Max(maps.Count, ans);
}
return
ans;
}
static
public
void
Main()
{
int
[] arr = { 4, 2, 6, 10 };
int
k = 3;
int
n = arr.Length;
Console.Write(maximumDPF(arr, n, k));
}
}