题目链接
链接: 生成函数
题目描述
解题思路
裴蜀定理
简单来说就是
若a,b是整数,且gcd(a,b)=d,那么对于任意的整数x,y,ax+by都一定是d的倍数,一定存在整数x,y,使ax+by=d成立。
对于本题来说,首先使用c++自带的__gcd函数算出三个砝码的最大公约数,如果物品的重量能整除ax+by=d中的d,那么说明等式一定能成立,则输出YES
同时__gcd函数也可以自己实现,本质就是辗转相除法求最大公约数
方式一
int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
方式二
int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
代码实现
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
void solve()
{
int a,b,c,m;
cin>>a>>b>>c>>m;
int k=__gcd(a,__gcd(b,c));
if(m%k==0) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int T;
cin>>T;
while(T--) solve();
return 0;
}