洛谷P2651 添加括号III

地址:https://www.luogu.com.cn/problem/P2651

题意如此

解析:

要想分数可化为整数,那么分子与分母的最大公因数为分母本身。

a1,a2,......an

可以得出,不管怎么变换顺序,a1必为分子,a2必为分母。

要想分子能整除分母,那么分子一定要包含分母的所有因数而且数目大于等于分母。

所以,最优的组合一定是:a1*a3*a4.....*an/(a2)

这样,分子可以包含尽量多的因数种类和数目。

直接乘的话,会爆int,所以只要a2去除每一个gcd(a2,ai)就可以了,只要a2最终为1,即yes

#include<cstdio>
#include<map>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn=2e5+10;
int main()
{    // 4 0 20
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        int a,b;
        cin>>a>>b;
        b=b/__gcd(a,b);
        for(int i=3;i<=n;i++)
        {
            int x;
            cin>>x;
            b=b/__gcd(b,x);
        }
        if(b==1)
            cout<<"Yes"<<endl;
        else
            cout<<"No"<<endl;
    }
}
原文地址:https://www.cnblogs.com/liyexin/p/13236099.html