在Python中查找给定数组的所有子数组和的2的幂次和的程序

在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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程