import
java.util.*;
class
GFG{
public
static
int
MAX =
1001
;
public
static
int
[] sieve()
{
int
spf[] =
new
int
[MAX];
spf[
0
] = spf[
1
] = -
1
;
for
(
int
i =
2
; 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;
}
}
}
}
return
spf;
}
public
static
int
countFactors(
int
spf[],
int
num)
{
int
count =
0
;
while
(num >
1
)
{
count++;
num = num / spf[num];
}
return
count;
}
public
static
int
[] precalculateSum(
int
spf[])
{
int
sum[] =
new
int
[MAX];
sum[
0
] =
0
;
for
(
int
i =
1
; i < MAX; i++)
{
int
prime_factor = countFactors(spf, i);
if
(spf[prime_factor] == prime_factor)
{
sum[i] = sum[i -
1
] +
1
;
}
else
{
sum[i] = sum[i -
1
];
}
}
return
sum;
}
public
static
void
main(String[] args)
{
int
spf[] = sieve();
int
sum[] = precalculateSum(spf);
int
Q[][] = { {
4
,
8
}, {
30
,
32
} };
for
(
int
i =
0
; i <
2
; i++)
{
System.out.print((sum[Q[i][
1
]] -
sum[Q[i][
0
] -
1
]) +
" "
);
}
}
}