using
System;
using
System.Collections;
using
System.Collections.Generic;
class
GFG{
static
int
MAX = 10000000;
static
bool
[]isPrime =
new
bool
[MAX + 1];
static
ArrayList primes =
new
ArrayList();
static
void
SieveOfEratosthenes()
{
Array.Fill(isPrime,
true
);
for
(
int
p = 2; p * p <= MAX; p++)
{
if
(isPrime[p] ==
true
)
{
for
(
int
i = p * p; i <= MAX; i += p)
isPrime[i] =
false
;
}
}
for
(
int
p = 2; p <= MAX; p++)
if
(isPrime[p])
primes.Add(p);
}
static
int
prime_search(ArrayList primes,
int
diff)
{
int
low = 0;
int
high = primes.Count - 1;
int
res = -1;
while
(low <= high)
{
int
mid = (low + high) / 2;
if
((
int
)primes[mid] == diff)
{
return
(
int
)primes[mid];
}
else
if
((
int
)primes[mid] < diff)
{
low = mid + 1;
}
else
{
res = (
int
)primes[mid];
high = mid - 1;
}
}
return
res;
}
static
int
minCost(
int
[]arr,
int
n)
{
SieveOfEratosthenes();
int
res = 0;
for
(
int
i = 1; i < n; i++)
{
if
(arr[i] < arr[i - 1])
{
int
diff = arr[i - 1] - arr[i];
int
closest_prime = prime_search(primes,
diff);
res += closest_prime;
arr[i] += closest_prime;
}
}
return
res;
}
public
static
void
Main(
string
[] args)
{
int
[]arr = { 2, 1, 5, 4, 3 };
int
n = 5;
Console.Write(minCost(arr, n));
}
}