C. Nikita and LCM
1.D. Birthday Gift2.P2613 【模板】有理数取余3.P2657 [SCOI2009] windy 数4.P8754 [蓝桥杯 2021 省 AB2] 完全平方数
5.C. Nikita and LCM
6.G. D-Function7.A. Bitwise Operation Wizard8.M. 渚千夏的串9.E. Look Back10.数论里的欧拉定理,简单证明,非常简单11.D. Same GCDs12.B. Missing Subsequence Sum13.P2568 GCD14.D. Small GCD15.C. Jellyfish and Green Apple16.C. Even Subarrays17.F - x = a^b18.D - Square Pair题解
发现一串数字的lcm一定大于等于这一串数字的最大值,所以如果整个数组的lcm大于
否则,注意这里的思维,否则,剩余数字组成的lcm一定小于等于
code
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll a[2005];
int n;
map<ll,bool> vis;//是否在数组中
ll check(ll lcm)
{
ll tem=1;
ll cnt=0;
for(int i=1;i<=n;i++)
{
ll val=a[i];
if(lcm%val) continue;
tem=tem/__gcd(tem,val)*val;//该数字能作为组成lcm的一部分
cnt++;
}
if(tem==lcm) return cnt;//能不能达到这个lcm
return 0;
}
void solve()
{
cin>>n;
ll maxs=0;
for(ll i=1;i<=n;i++)
{
cin>>a[i];
vis[a[i]]=1;
maxs=max(maxs,a[i]);
}
ll tem=1;
for(ll i=1;i<=n;i++)
{
tem=tem/__gcd(tem,a[i])*a[i];//求lcm
if(tem>maxs)
{
cout<<n<<"\n";
return;
}
}
ll ans=0;
for(ll i=2;i*i<=tem;i++)//寻找可能的lcm
{
if(tem%i) continue;
if(!vis[i]) ans=max(ans,check(i));//不在数组中的lcm
if(!vis[tem/i]) ans=max(ans,check(tem/i));
}
cout<<ans<<"\n";
vis.clear();
}
int main()
{
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
ll t;
cin>>t;
while(t--)
{
solve();
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~