提交时间:2024-03-21 11:37:44

运行 ID: 43740

#include <iostream> using namespace std; // 找两个数的最大公约数 int gcd(int a,int b){ if(a%b==0)return b; else return gcd(b,a%b); } int a[25]; bool f[10005]; int main(){ int n; cin>>n; cin>>a[0]; int g=a[0]; f[a[0]]=1; for(int i=1;i<n;i++){ cin>>a[i]; // 找n个数的最大公约数 g=gcd(g,a[i]); // 标记a[i] f[a[i]]=1; } // n个数不能互质,则不能组合的数字有无限个 if(g!=1){ cout<<-1; return 0; } // 标记所以可能的组合 for(int i=1;i<10000;i++){ if(f[i]==1) for(int j=0;j<n;j++){ f[i+a[j]]=1; } } // 统计不可能的组合 int cnt=0; for(int i=1;i<10000;i++) if(f[i]==0)cnt++; cout<<cnt; return 0; }