using
System;
using
System.Collections.Generic;
class
GFG{
static
readonly
int
MAX = 1000;
static
int
[]weight =
new
int
[MAX];
static
int
[]level =
new
int
[MAX];
static
int
[]par =
new
int
[MAX];
static
bool
[]prime =
new
bool
[MAX + 1];
static
List<
int
>[] graph =
new
List<
int
>[MAX];
static
void
SieveOfEratosthenes()
{
for
(
int
i = 0;
i < prime.Length; i++)
prime[i] =
true
;
for
(
int
p = 2;
p * p <= MAX; p++)
{
if
(prime[p] ==
true
)
{
for
(
int
i = p * p;
i <= MAX; i += p)
prime[i] =
false
;
}
}
}
static
void
dfs(
int
node,
int
parent,
int
h)
{
par[node] = parent;
level[node] = h;
foreach
(
int
child
in
graph[node])
{
if
(child == parent)
continue
;
dfs(child, node, h + 1);
}
}
static
int
findPrimeOnPath(
int
u,
int
v)
{
int
count = 0;
if
(level[u] > level[v])
{
int
temp = v;
v = u;
u = temp;
}
int
d = level[v] - level[u];
while
(d-- > 0)
{
if
(prime[weight[v]])
count++;
v = par[v];
}
if
(v == u)
{
if
(prime[weight[v]])
count++;
return
count;
}
while
(v != u)
{
if
(prime[weight[v]])
count++;
if
(prime[weight[u]])
count++;
u = par[u];
v = par[v];
}
if
(prime[weight[v]])
count++;
return
count;
}
public
static
void
Main(String[] args)
{
for
(
int
i = 0; i < graph.Length; i++)
graph[i] =
new
List<
int
>();
SieveOfEratosthenes();
weight[1] = 5;
weight[2] = 10;
weight[3] = 11;
weight[4] = 8;
weight[5] = 6;
graph[1].Add(2);
graph[2].Add(3);
graph[2].Add(4);
graph[1].Add(5);
dfs(1, -1, 0);
int
u = 3, v = 5;
Console.Write(findPrimeOnPath(u, v));
}
}