<script>
function
__gcd(a, b) {
if
(b == 0)
return
a;
return
__gcd(b, a % b);
}
function
build_tree(b, seg_tree, l, r, vertex) {
if
(l == r) {
seg_tree[vertex] = b[l];
return
;
}
let mid = Math.floor((l + r) / 2);
build_tree(b, seg_tree, l, mid, 2 * vertex);
build_tree(b, seg_tree, mid + 1, r, 2 * vertex + 1);
seg_tree[vertex] = __gcd(seg_tree[2 * vertex], seg_tree[2 * vertex + 1]);
}
function
range_gcd(seg_tree, v, tl, tr, l, r) {
if
(l > r)
return
0;
if
(l == tl && r == tr)
return
seg_tree[v];
let tm = Math.floor((tl + tr) / 2);
return
__gcd(
range_gcd(seg_tree, 2 * v, tl, tm, l, Math.min(tm, r)),
range_gcd(seg_tree, 2 * v + 1, tm + 1, tr, Math.max(tm + 1, l), r)
);
}
function
maxSubarrayLen(arr, n) {
let seg_tree =
new
Array(4 * n + 1).fill(0);
build_tree(arr, seg_tree, 0, n - 1, 1);
let maxLen = 0;
let l = 0,
r = 0;
while
(r < n && l < n) {
if
(range_gcd(seg_tree, 1, 0, n - 1, l, r) == 1) {
l++;
}
maxLen = Math.max(maxLen, r - l + 1);
r++;
}
document.write(maxLen);
}
let arr = [410, 52, 51, 180, 222, 33, 33];
let N = arr.length;
maxSubarrayLen(arr, N);
</script>