数组长度为 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)
对于所有质数 p
和 n
与 p
互质。
因此,n^x ≡ n^(x mod (p-1)) (mod p)
现在使用帕斯卡三角形或任何可能有助于计算的东西 x mod (p-1)
。
我得到了一个长度为 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)
对于所有质数 p
和 n
与 p
互质。
因此,n^x ≡ n^(x mod (p-1)) (mod p)
现在使用帕斯卡三角形或任何可能有助于计算的东西 x mod (p-1)
。