import
java.util.*;
class
GFG {
static
int
GCD(
int
a,
int
b)
{
if
(b ==
0
)
return
a;
return
GCD(b, a % b);
}
static
void
FillPrefixSuffix(
int
prefix[],
int
arr[],
int
suffix[],
int
n)
{
prefix[
0
] = arr[
0
];
for
(
int
i =
1
; i < n; i++)
prefix[i] = GCD(prefix[i -
1
], arr[i]);
suffix[n -
1
] = arr[n -
1
];
for
(
int
i = n -
2
; i >=
0
; i--)
suffix[i] = GCD(suffix[i +
1
], arr[i]);
}
static
int
GCDoutsideRange(
int
l,
int
r,
int
prefix[],
int
suffix[],
int
n) {
if
(l ==
0
)
return
suffix[r +
1
];
if
(r == n -
1
)
return
prefix[l -
1
];
return
GCD(prefix[l -
1
], suffix[r +
1
]);
}
public
static
void
main(String[] args) {
int
arr[] = {
2
,
6
,
9
};
int
n = arr.length;
int
prefix[] =
new
int
[n];
int
suffix[] =
new
int
[n];
FillPrefixSuffix(prefix, arr, suffix, n);
int
l =
0
, r =
0
;
System.out.println(GCDoutsideRange
(l, r, prefix, suffix, n));
l =
1
;
r =
1
;
System.out.println(GCDoutsideRange
(l, r, prefix, suffix, n));
l =
1
;
r =
2
;
System.out.println(GCDoutsideRange
(l, r, prefix, suffix, n));
}
}