首页 > 代码库 > 51nod1247(gcd)

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 }
View Code

 

51nod1247(gcd)