生成函数——裴蜀定理

有三种数量无限的砝码和一个天平,天平的一端有一个质量为 m 的物品,问能否通过放置砝码使得天平平衡?

输入
第一行包含一个整数 T (1 ≤ T ≤ 1e5),表示测试用例的组数。
每组测试用例的第一行包含四个整数 a,b,c,m (1 ≤ a,b,c,m ≤ 1e9),表示三种砝码和物品的质量。

输出
对于每组测试用例,如果能够使得天平平衡,输出 "YES",否则输出 "NO"。

Input
3
1 2 5 8
2 4 6 3
7 8 24 9

Output
YES
NO
YES

知识点
裴蜀定理:对于任意一对正整数a,b,一定存在非零整数x,y,使得ax+by=gcd(a,b)。
也就是说 如果 ax+by=m,则一定存在 m%gcd(a,b)=0。

解析:
裴蜀定理应用两次即可。

#include 
using namespace std;
#define int long long
#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
typedef pair PII;
const double PI=acos(-1.0);
const int N=2e6+10;
int t;
int a,b,c,m;
int gcd(int a,int b)
{
    return b? gcd(b,a%b) : a;
}
signed main()
{
    ios;
    cin>>t;
    while (t--)
    {
        cin>>a>>b>>c>>m;
        int k=gcd(a,gcd(b,c));
        if (m%k==0) cout<<"YES\n";
        else cout<<"NO\n";
    }
    return 0;
}

你可能感兴趣的:(算法,数据结构)