C. Nikita and LCM

原题链接

题解

发现一串数字的lcm一定大于等于这一串数字的最大值,所以如果整个数组的lcm大于 amax ,直接输出n
否则,注意这里的思维,否则,剩余数字组成的lcm一定小于等于 amax 且是 amax 的因子

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;
}

posted @   纯粹的  阅读(57)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示