题意: 解法: 其实就是要找到一个答案数,满足每个数都至少有一个质因子出现在这个答案数中, 那么显然就是用若干种质因子相乘构造出答案数. 观察到数据范围较小,查了一下发现50以内的质数只有15个, 那么二进制枚举质数的选择,用合法的答案数更新答案即可. code: #include <bits/stdc++.h> #define int long long #define PI pair<int,int> using namespace std; const int maxm=2e6+5; const int mod=1e9+7; bool isprime(int x){ for(int i=2;i*i<=x;i++){ if(x%i==0)return 0; } return 1; } void solve(){ vector<int>p; for(int i=2;i<=50;i++){ if(isprime(i)){ p.push_back(i); } } vector<int>a; int n;cin>>n; for(int i=1;i<=n;i++){ int x;cin>>x; a.push_back(x); } int c=p.size(); int ans=1e18; for(int i=0;i<(1<<c);i++){ int temp=1; for(int j=0;j<c;j++){ if(i>>j&1)temp*=p[j]; } int ok=1; for(auto s:a){ if(__gcd(temp,s)==1){ ok=0;break; } } if(ok)ans=min(ans,temp); } cout<<ans<<endl; } signed main(){ ios::sync_with_stdio(0); solve(); return 0; }