import sys
n = list(map(int,input().split()))[0]
arr = list(map(int,input().split()))
dp = [[] for _ in range(n)]
sum_list = []
count = []
a0 = []
su_set = set()
# 把2—1000的素数找出来:
for i in range(2,1001):
count = 0
for j in range(1,i+1):
if i%j==0:
count +=1
if count == 2:
su_set.add(i)
# 把素因子找出来
for i in range(n):
for j in range(1,arr[i]+1):
if arr[i]%j==0 and (j in su_set):
dp[i].append(j)
# 找素因子之和的最小值,从最上面开始遍历
j=0
def dfs(dp,tmp,n):
if not dp :
if len(tmp)==n:
sum_list.append(sum(tmp))
return True
else:
for i in dp[0]:
if i not in tmp:
dfs(dp[1:],tmp+[i],n)
dfs(dp,a0,n)
if len(sum_list)==0:
print(-1)
else:
print(min(sum_list))
关于递归,我感觉我还是不会哈哈哈



京公网安备 11010502036488号