题目
给定N(2<=N<=25)个数字币,每个数字币上都有一个面值(面值可以重复)。从数字币中任选K(2<=K<=N)个,有多种选法,请将选择的数字币面值累加,然后解决以下两个问题。
问题1:累加的和中有多少种不同的结果;
问题2:累加的和中有多少个不同的合数。
代码
N=int(input())
num_list=list(map(int,input().split(',')))
K=int(input())
path=[]
ans=[]
ans_1=[]
flag=[0]*N
def composite_number(num):
for i in range(2,num//2+1):
if num%i==0:
return True
return False
def dfs(f):
sum = 0
if f==K:
for num in path:
sum+=num
if sum not in ans:
if composite_number(sum):
ans_1.append(sum)
ans.append(sum)
return
for i in range(f,N):
if flag[i]==1:
continue
flag[i] = 1
path.append(num_list[i])
dfs(f+1)
flag[i]=0
path.pop()
dfs(0)
print(str(len(ans))+','+str(len(ans_1)))