zoukankan      html  css  js  c++  java
  • 51nod 1069【思维】

    具体思路来自相关讨论
    给个不太严谨的证明思路:
    第一步:证明路径可逆,也就是如果(a, b) -> (x, y)可行,则(x, y) - > (a, b)可行
    这个比较直观,只需要分别由(a +b, b) (a, a + b), (a - b, b), (a, a - b)推回(a, b)即可:
    例如:(a, a - b) - > (b, a - b) - > (b, a) -> (a + b, a) - > (a + b, b) -> (a, b)
    (a, a + b)->(2a + b, a + b) - > (2a + b, a)->(a + b, a) ->(a+b, b) ->(a, b)
    注意这里也顺手说明了(a, b)->(b, a)可行
    第二步:既然路径可逆,那题目的可以这样改写:是否存在点(m, n)使得(a, b) -> (m, n)可行且,(x, y)->(m, n)可行
       因为(a, b) -> (b, a)可行,则不失一般性,可假设:a > b
    可以这样逐次推导:(a, b) -> (a - b, b) -> (a - 2b, b)-> … ->(a - nb, b),其中, n = a / b, 则,改写一下:
    (a, b) - > (a % b, b) ->(b, a % b)
    由此联想到欧几里得算法求解最大公约数的过程,不用多说了。。。

    #include <bits/stdc++.h>
    using namespace std;
    
    typedef long long LL;
    
    
    int main()
    {
        LL x,y,a,b;
        LL g1,g2;
    
        int T;
        scanf("%d",&T);
        while(T--)
        {
            cin>>a>>b>>x>>y;
            g2=__gcd(a,b);
            g1=__gcd(x,y);
            if(g1==g2)
                puts("Yes");
            else
                puts("No");
        }
        return 0;
    }
    
    
  • 相关阅读:
    js中级-函数封装
    js中级-11.7
    js中级-11.5
    js中级-11.2
    js中级-this
    js中级-作用域链
    10.23
    10.22
    10.19js
    10.18
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934818.html
Copyright © 2011-2022 走看看