import itertools def get_prime_factors(num): factors=set() i=2 while i*i<=num: # 只需要检查到 sqrt(num) while num%i==0: # 整除 factors.add(i) num=num//i # 不断除以当前质数 i=i+1 # 关键步骤 处理剩余的质数 num>1 说明剩余的num 是一个质数 无法被2-sqrt(num) 之间的任何数整除 if num>1: factors.add(num) return factors def dfs(arr:list): result=[] # 定义行 rows=len(arr) def dfs_helper(row,path): if rows==row: result.append(path.copy()) return # 遍历这行每个元素 for num in arr[row]: path.append(num) dfs_helper(row+1,path) path.pop() dfs_helper(0,[]) return result def func(): n = int(input()) a=list(map(int,input().split())) prime_factors_list=[] #所有数的素数 因子 for num in a: factors=get_prime_factors(num) prime_factors_list.append(factors) # 设置最小值 min_sum =float('inf') # 使用dfs res=dfs(prime_factors_list) #print("pr",prime_factors_list) #print("res",res ) #for combinations in itertools.product(*prime_factors_list): for combinations in res: if len(set(combinations))==n: current_sum =sum(combinations) if min_sum>current_sum: min_sum=current_sum ret = min_sum if min_sum!=float('inf') else -1 print(ret) func()