Codeforces Round #560 (Div. 3) D - Almost All Divisors (结论题)

没读懂题就开始写的后果。

题目中给出的因子是所有因子啊啊啊啊啊!如果X存在,一定是最小因子与最大因子之积,因为如果 k 是 x 的因子,则 x/k 也是x的因子。。

然后就判断一下其他的积是不是,然后判断一下是否包含全部因子即可。

#define int ll
signed main()
{
    int t;cin>>t;
    while(t--)
    {
        int n;cin>>n;
        vector<ll> v(n); cin>>v;//用宏定义 vi ,导致define int ll 不起作用,溢出错误
        sort(all(v));
        ll ans= v[0]*v[n-1];
        int l = 1 ,r =n-2;
        while(l<=r)//l<=r 记得还有 i * i的情况
        {
            if(v[l]*v[r]!=ans) 
            {
                ans=-1; break;
            }
            ++l,--r;
        }
        if(ans==-1)
        {
            cout<<ans<<endl;
            continue;
        }
        map<int,int>mp;
        rep(i,n) mp[v[i]] = 1;
        for(int i = 2;i*i<=ans;++i)
        {
            if(ans%i) continue;
            if(mp[i]==0||mp[ans/i]==0)
            {
                ans=-1;
                break;
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}
发布了82 篇原创文章 · 获赞 1 · 访问量 1419

猜你喜欢

转载自blog.csdn.net/weixin_44116061/article/details/104110865