在Python中查找给定数组的所有子数组和的2的幂次和的程序
假设我们有一个列表A。我们已将所有非空子列表作为该列表的子列表,因为我们知道一个有n个元素的列表具有(2n-1)个非空子列表。现在,对于每个子列表,他计算子列表和(元素和,并将它们表示为S 1 ,S 2 ,S 3 ,…,S (2N-1) )。有一个特殊的总和P,使得P = 2 S1 + 2 S2 +2 S3 …. + 2 S(2N-1) 。我们必须找到P。如果P太大,则返回P mod(10^9 + 7)。
因此,如果输入如下A=[2,2,3],则输出为子集:
- {2},所以2^2=4
- {2},所以2^2=4
- {3},所以2^3=8
- {2,2},所以2^4=16
- {2,3},所以2^5=32
- {2,3},所以2^5=32
- {2,2,3},所以2^7=128
总和为4+4+8+16+32+32+128=224
要解决此问题,我们将按照以下步骤进行−
- ans:=1
- m:=10^9+7
- 对于每个el在A中,进行以下操作
- ans:=ans*(1+(2^el mod m))
- ans:=ans mod m
- 返回(m+ans-1)mod m
示例
请查看以下实现以获得更好的理解−
def solve(A):
ans=1
m=10**9+7
for el in A:
ans *= (1+pow(2, el, m))
ans %= m
return (m+ans-1) % m
A=[2,2,3]
print(solve(A))
输入
[2,2,3]
输出
224