总和、幂和子集

问题描述 投票:0回答:1

def all_subsets(arr):
    subsets = [[]]
    for num in arr:
        subsets += [curr + [num] for curr in subsets]
    subsets.remove([])  # Remove the empty set    return subsets

def find_subset_sums(arr):
    subsets = all_subsets(arr)
    subset_sums = [sum(subset) for subset in subsets]
    return subset_sums

def raise_to_power(numbers, n):
    powered_numbers = [num ** n for num in numbers]
    return powered_numbers

def sum_of_powers(arr, n):
    subset_sums = find_subset_sums(arr)
    powered_sums = raise_to_power(subset_sums, n)
    total_sum = sum(powered_sums)
    return total_sum

a, b = map(int, input().split())
integers = list(map(int, input().split()))

total_sum = sum_of_powers(integers, b)
print(total_sum)

这是我的问题代码。

我测试了示例输入,它给出了正确的输出。

但是对于这个输入

18 2

482 154 785 886 116 733 769 179 996 867 480 839 909 282 100 847 173 989

代码输出7878350864384,错误。为什么?

任何帮助将不胜感激

python sum subset
1个回答
0
投票

当你求幂时,你还需要取模。这是你如何做到的。

MOD = 998244353


def raise_to_power(numbers, n):
    powered_numbers = [pow(num, n, MOD) for num in numbers]
    return powered_numbers

最后还要取模一次,以防总和超过

MOD
print(total_sum % MOD)

© www.soinside.com 2019 - 2024. All rights reserved.