51nod1247(gcd)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1247
题意:中文题诶~
思路:(a, b)可以直接到达(a+b, b), (a, a+b), (a-b, b), (a, a-b),显然这样的路径是可逆的。那么要从(a, b)到(x, y),当且仅当存在一点p, 从(a, b), (x, y)出发都能到达。
由题意还可以知道,若gcd(a, b)=d,那么从(a, b)出发必定可以到达(d, d),那么显然由(a, b)可以到达(x, y)的充要条件是gcd(a, b)=gcd(x, y)。
代码:
1 #include <stdio.h> 2 #define ll long long 3 using namespace std; 4 5 int get_gcd(ll x, ll y){ 6 return y==0?x:get_gcd(y, x%y); 7 } 8 9 int main(void){ 10 ll a, b, x, y; 11 int t; 12 scanf("%d", &t); 13 while(t--){ 14 scanf("%lld%lld%lld%lld", &a, &b, &x, &y); 15 int cnt1=get_gcd(a, b); 16 int cnt2=get_gcd(x, y); 17 if(cnt1==cnt2){ 18 printf("Yes\n"); 19 }else{ 20 printf("No\n"); 21 } 22 } 23 }
我就是我,颜色不一样的烟火 --- geloutingyu