数组长度为 k 的所有子序列的元素的乘积

Product of Products of elements of all subsequences of length k of an array

我得到了一个长度为 n 的数组。我必须找到长度为 k.

的所有子序列的元素乘积

例如

数组 -> [1,2,3,4] n=4,k=2

子序列 -> {1,2} {1,3} {1,4} {2,3} {2,4} {3,4}

产品 -> 2 3 4 6 8 12

乘积2*3*4*6*8*12 = 13824

如果 n & k 很小,可以很容易地完成,但是当 [=24= 时我无法得到结果]1<=n<=2000,1<=k<=n。答案可能太大,因此我们可以对 1000000007 取模给出答案。谁能告诉我大 n & k 怎么做?

Product of products 的意思和product一样:(a_1 * a_2) * (a_3 * a_4) = a_1 * a_2 * a_3 * a_4.

子序列的乘积可以用幂有效地计算:(a_1 * a_2) * (a_1 * a_3) * (a_2 * a_3) = a_1 * a_1 * a_2 * a_2 * a_3 * a_3 = a_1 ** 2 * a_2 ** 2 * a_3 ** 2

找到 n 个包含第一个元素的子序列。然后计算每个元素(a_i ** n = a'_i)的n次方。然后计算所有a'_i.

的乘积

还有 (a * a * a) % b = ((((a* a) % b) * a) % b)

(a *b )%c = ((a%c) * (b%c))%c

更多提示:

费马小定理状态(^表示解释)

n^(p-1) ≡ 1 (mod p) 对于所有质数 pnp 互质。

因此,n^x ≡ n^(x mod (p-1)) (mod p)

现在使用帕斯卡三角形或任何可能有助于计算的东西 x mod (p-1)