defis_prime(num): """检查一个数是否为素数(适用于小数的试除法)""" if num < 2: returnFalse for i inrange(2, int(math.sqrt(num)) + 1): if num % i == 0: returnFalse returnTrue
defcount_prime_subset_sums(n): """统计{1,2,...,n}中和为素数的子集数量(暴力法)""" count = 0 # 遍历所有非空子集大小(1到n) for subset_size inrange(1, n + 1): # 生成当前大小的所有子集 for subset in itertools.combinations(range(1, n + 1), subset_size): subset_sum = sum(subset) if is_prime(subset_sum): count += 1 return count