operation = input() #操作次数 items = input() #输入序列 #将输入序列转换成列表 items_str = items.split(' ') items_list = list(map(int, items_str)) #将字符型转换成整型 #创建变量名 sushu = [] yinzi = [] suyinzi = [] suyinzi_final = [] #对输入序列进行第一次分解,判断出哪些是素数,得到所有数的因子 for i in items_list: count = 0 #count 统计因子个数(因子不包括1),因此如果一个数只有一个因子,则该因子为其素因子 for j in range(2,i+1): #因为1不是素因子,所以计算因子时范围不用从1开始 if i % j == 0: yinzi.append(j) #yinzi储存第一次因子拆分 count += 1 if count == 1: sushu.append(i) l_sushu = len(sushu) #输入序列中素数的个数 #对因子再次进行拆分,以确认哪些是素因子 for i in yinzi: count = 0 for j in range(2,i+1): if i % j == 0: count += 1 if count == 1: suyinzi.append(i) #现在suyinzi储存的是输入序列的所有素因子(包括输入序列中的那些素数) #删除素因子列表中出现在输入序列中的素数 for i in suyinzi: if i not in sushu: suyinzi_final.append(i) #如果不删除的话,后续对素因子序列去重排序后,取前operation个数的结果可能导致输入序列中的素数不被选中 #因子,要提前确保素数一定被选中,再从素因子中选数相加 l = int(operation) #l是操作次数,即最终应该取出多少个素因子进行相加(每个输入取一个因子) l_suyinzi = l-l_sushu #如果输入序列中存在素数,则该数必须被取,因此素因子中可以取的数的个数=(总共要取的)-(已确认要取的) s = slice(l_suyinzi) final_set = list(set(suyinzi_final))#对素因子进行去重,因为不允许不同的数选相同的因子,那么素因子序列中不可能有重复数 final_set.sort() #对素因子进行由小到大排序 final = final_set[s] + sushu #在排序后final_set中取前l_suyinzi个数(这样求出的是最小值),再加上必须选入的输入序列中的素数 if len(final_set) >= l_suyinzi: #若不存在合法的取法,那么final_set的长度会比l_suyinzi的长度更小,即能取的素因子个数 < 应取的素因子个数 s = sum(final) print(s) else: print(-1)