直接爆搜,枚举每个数取出的质因子即可。
PS:我是真的菜。
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e3+10;
const int inf = 0x3f3f3f3f;
//vector <int> pd[20];
int pr[N],cnt,a[20];
bool vis[N],book[N];
int ans,n;
void dfs(int cur,int res)
{
if(cur==n+1)
{
ans=min(ans,res);
return ;
}
for(int i=0;pr[i]<=a[cur];i++)
{
if(a[cur]%pr[i]==0&&!book[i])
{
book[i]=1;
dfs(cur+1,res+pr[i]);
book[i]=0;
}
}
return ;
}
void Init()
{
ans=inf;
for(int i=2;i<=N-10;i++)
{
if(!vis[i]) pr[cnt++]=i;
for(int j=0;j<cnt&&i*pr[j]<=N-10;j++)
{
vis[i*pr[j]]=1;
if(i%pr[j]==0) break;
}
}
return ;
}
int main(void)
{
Init();
int x;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
dfs(1,0);
if(ans==inf) ans=-1;
printf("%d\n",ans);
return 0;
}