defis_prime(num): """判断一个数是否为素数(处理边界情况:num<2时返回False)""" if num < 2: returnFalse for i inrange(2, int(num**0.5) + 1): if num % i == 0: returnFalse returnTrue
defcount_prime_subsets_pn(n): """计算集合{1,2,...,n}中和为素数的非空子集数量""" nums = list(range(1, n + 1)) # 生成集合{1,2,...,n} subset_count = 0 total_subsets = (1 << n) - 1# 非空子集总数:2ⁿ - 1 for mask inrange(1, total_subsets + 1): # 枚举所有非空子集(掩码从1到2ⁿ-1) subset_sum = 0 for i inrange(n): # 计算当前子集的元素和 if mask & (1 << i): # 第i位为1表示包含第i个元素 subset_sum += nums[i] if is_prime(subset_sum): # 验证和是否为素数 subset_count += 1 return subset_count