提示信息:
合数:合数指自然数中除了能被1和本身整除外,还能被其它正整数整除的数。
例如4,4除了能被1和4整除,还可以被2整除。
编程实现:
小明收藏了N(2≤N≤25)个数字币,每个数字币上都有一个面值(面值可以重复)。从数字币中任选K(2≤K≤N)个,有多种选法,请将每次选择的数字币上的面值累加,然后解决以下两个问题。
问题1:累加的和中有多少种不同的结果;
问题2:累加的和中有多少个不同的合数。
例如:N=5,K=3,5个数字币上的面值分别为2、1、4、5、3,任选3个数字币,有10种选法,将每种选法上的面值累加:
2+1+4=7、2+1+5=8、2+1+3=6、2+4+5=11、2+4+3=9、2+5+3=10、1+4+5=10、1+4+3=8、1+5+3=9、4+5+3=12。
其中累加的和中有7种不同的结果,分别是7、8、6、11、9、10、12,
累加的和中有5个不同的合数,分别是8、6、9、10、12。
输入描述
第一行输入一个正整数N(2≤N≤25),表示数字币的个数
第二行输入N个正整数(1≤正整数≤1000),表示数字币上的面值,正整数之间以一个英文逗号隔开
第三行输入一个正整数K(2≤K≤N),表示所要选取的数字币个数
输出描述
输出两个整数,分别表示累加的和中不同结果的个数以及累加的结果中不同合数的个数,两个整数之间以一个英文逗号隔开
样例输入
5
2,1,4,5,3
3
样例输出
7,5
n=int(input())
ns=list(map(int,input().split(',')))
num=int(input())
needs=[]
def f(num,nns=[]):
if num==0:
needs.append(sum(nns))
nns.pop()
else:
for n in ns:
if n not in nns:
nns.append(n)
f(num-1,nns)
if nns!=[]:
nns.pop()
f(num)
rs=list(set(needs))
cnt=0
for r in rs:
mark=True
for i in range(2,r):
if r%i==0:
mark=False
if not mark:
cnt+=1
print(len(rs),cnt,sep=',')