范围 LCM 查询的 Javascript 程序
给定一个整数数组,计算 LCM(l, r) 形式的查询。可能有很多查询,因此可以有效地评估查询。
LCM (l, r) denotes the LCM of array elements
that lie between the index l and r
(inclusive of both indices)
Mathematically,
LCM(l, r) = LCM(arr[l], arr[l+1] , ......... ,
arr[r-1], arr[r])
例子:
Inputs : Array = {5, 7, 5, 2, 10, 12 ,11, 17, 14, 1, 44}
Queries: LCM(2, 5), LCM(5, 10), LCM(0, 10)
Outputs: 60 15708 78540
Explanation : In the first query LCM(5, 2, 10, 12) = 60,
similarly in other queries.
一个天真的解决方案是遍历每个查询的数组并使用以下方法计算答案,
LCM(a, b) = (a*b) / GCD(a,b)
但是,由于查询的数量可能很大,因此这种解决方案是不切实际的。
一个有效的解决方案是使用段树。回想一下,在这种不需要更新的情况下,我们可以构建一次树,然后可以重复使用它来回答查询。树中的每个节点都应该存储该特定段的 LCM 值,我们可以使用与上述相同的公式来组合这些段。因此,我们可以有效地回答每个查询!
以下是相同的解决方案。
Javascript
输出:
60
15708
78540
有关详细信息,请参阅有关范围 LCM 查询的完整文章!