📜  数组中范围产品的Javascript程序

📅  最后修改于: 2022-05-13 01:57:48.381000             🧑  作者: Mango

数组中范围产品的Javascript程序

给定一个大小为 N 的数组 A[]。解决 Q 个查询。在模 P 下找到范围 [L, R] 中的产品(P 是素数)。

例子:

Input : A[] = {1, 2, 3, 4, 5, 6} 
          L = 2, R = 5, P = 229
Output : 120

Input : A[] = {1, 2, 3, 4, 5, 6},
         L = 2, R = 5, P = 113
Output : 7 

蛮力
对于每个查询,遍历 [L, R] 范围内的每个元素并计算模 P 下的乘积。这将在 O(N) 中回答每个查询。

Javascript


Javascript


输出 :

120
6

高效使用模乘逆:
由于 P 是素数,我们可以使用模乘逆。使用动态规划,我们可以计算模 P 下的前积数组,使得索引 i 处的值包含 [0, i] 范围内的乘积。类似地,我们可以计算模 P 下的预逆积。现在每个查询都可以在 O(1) 中得到回答。
逆积数组包含索引 i 处 [0, i] 范围内的逆积。因此,对于查询 [L, R],答案将是 Product[R]*InverseProduct[L-1]
注意:我们不能将答案计算为 Product[R]/Product[L-1],因为乘积是在模 P 下计算的。如果我们不计算模 P 下的乘积,总是有溢出的可能性。

Javascript


输出 :

7
6

有关更多详细信息,请参阅有关数组范围产品的完整文章!