Python程式:求給定陣列所有子陣列和的2次冪之和
假設我們有一個列表A。我們取A的所有非空子列表,我們知道一個有n個元素的列表l有(2n - 1)個非空子列表。現在,對於每個子列表,計算子列表的和(元素之和),用S1, S2, S3, ... , S(2N-1)表示。存在一個特殊的和P,使得P = 2S1 + 2S2 + 2S3 .... + 2S(2N-1)。我們需要找到P。如果P太大,則返回P mod (109 + 7)。
因此,如果輸入類似於A = [2,2,3],則輸出將是子集為:
- {2} 所以 22 = 4
- {2} 所以 22 = 4
- {3} 所以 23 = 8
- {2,2} 所以 24 = 16
- {2,3} 所以 25 = 32
- {2,3} 所以 25 = 32
- {2,2,3} 所以 27 = 128
總和是 4 + 8 + 16 + 32 + 128 = 188
為了解決這個問題,我們將遵循以下步驟:
- ans := 1
- m := 109 + 7
- 對於A中的每個元素el:
- ans := ans * (1 + (2el 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
廣告