小珂的苦恼
时间限制:1000 ms
内存限制:1000 KB
难度:2
描述
小珂是一名初中生,她现在很苦恼,因为老师布置了一个让她苦恼的作业,你能不能帮助她呢?题目信息如下。
已知二元一次方程 ax+by=n, 判断这个二元一次方程有没有整数解,x,y为未知数,其中a,b,n都为整数且不等于零,同时满足0<a,b,n<2^16-1。
输入
第一行有一个整数0<n<=1000000表示有 n组测试数据,接下来的每一行有三个整数分别是a,b,n
输出
存在整数x和y使得方程有解,输出“Yes”,否则输出“No”
样例输入
2
2 4 2
3 9 7
样例输出
Yes
No
分析
用扩展欧几里得定理判断是否有解即可,还需要稍微卡一下常(读入优化)
代码
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#define N putchar('N'),putchar('o'),putchar('\n')
#define Y putchar('Y'),putchar('e'),putchar('s'),putchar('\n')
using namespace std;
inline int read(){
int f=0,x=0;
char ch=getchar();
while(!isdigit(ch)) f|=(ch=='-'),ch=getchar();
while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
return f?-x:x;
}
inline int gcd(int x,int y){
return !y?x:gcd(y,x%y);
}
int main(){
int n,a,b,c,r;
read(n);
while (n--){
a=read();
b=read();
c=read();
r=gcd(a,b);
if(c%r) N;
else Y;
}
return 0;
}