import
java.util.*;
class
GFG{
static
final
int
MAXN =
200001
;
static
int
[][]table =
new
int
[
1001
][
1001
];
static
void
buildSparseTable(
int
[] arr,
int
n)
{
for
(
int
i =
0
; i < n; i++)
table[i][
0
] = arr[i];
for
(
int
j =
1
; j <= Math.log(n); j++)
for
(
int
i =
0
; i <= n - (
1
<< j);
i++)
table[i][j]
= __gcd(table[i][j -
1
],
table[i + (
1
<< (j -
1
))][j -
1
]);
}
static
int
__gcd(
int
a,
int
b)
{
return
b ==
0
? a:__gcd(b, a % b);
}
static
int
find_gcd(
int
L,
int
R)
{
int
j = (
int
)Math.log(R - L +
1
);
return
__gcd(table[L][j],
table[R - (
1
<< j) +
1
][j]);
}
static
int
[]spf =
new
int
[MAXN];
static
void
build_spf()
{
spf[
1
] =
1
;
for
(
int
i =
2
; i < MAXN; i++)
spf[i] = i;
for
(
int
i =
4
; i < MAXN; i +=
2
)
spf[i] =
2
;
for
(
int
i =
3
; i * i < MAXN; i++) {
if
(spf[i] == i) {
for
(
int
j = i * i; j < MAXN;
j += i)
if
(spf[j] == j)
spf[j] = i;
}
}
}
static
int
getFactorization(
int
x)
{
int
ctr =
0
;
while
(x !=
1
) {
ctr++;
int
p = spf[x];
while
(x % p ==
0
)
x = x / p;
}
return
ctr;
}
static
void
solveQueries(
int
[] a,
int
n,
int
[][] q)
{
for
(
int
i =
0
; i < q.length; i++) {
int
l = q[i][
0
];
int
r = q[i][
1
];
l--;
r--;
int
gcd = find_gcd(l, r);
int
ans =
0
;
for
(
int
j =
1
; j * j <= gcd; j++) {
if
(gcd % j ==
0
) {
ans = ans + (
1
<< getFactorization(j));
if
(gcd / j != j)
ans += (
1
<< getFactorization(gcd / j));
}
}
System.out.print(ans+
" "
);
}
}
static
void
preProcess(
int
[] a,
int
n)
{
build_spf();
buildSparseTable(a, n);
}
public
static
void
main(String[] args)
{
int
[] arr = {
1
,
2
,
2
,
4
,
5
};
int
[][]queries = {
{
2
,
3
}, {
2
,
4
}, {
3
,
4
}, {
4
,
4
}, {
4
,
5
}
};
preProcess(arr, arr.length);
solveQueries(arr, arr.length, queries);
}
}