zoukankan      html  css  js  c++  java
  • hdu 5974 A Simple Math Problem gcd(x,y)=gcd((x+y),lcm(x,y))

    题目链接

    题意

    现有$$x+y=alcm(x,y)=b$$找出满足条件的正整数(x,y).

    (aleq 2e5,bleq 1e9,数据组数12W).

    思路

    结论

    (gcd(x,y)=gcd((x+y),lcm(x,y)))

    证明

    先证(gcd(x,y)|gcd((x+y),lcm(x,y)))

    不妨设(gcd(x,y)=k),则有(kmid x,kmid y),则有(kmid (x+y)) …①

    (kmid x,xmid lcm(x,y)),所以(kmid lcm(x,y)) …②

    综合①②有(kmid gcd((x+y),lcm(x,y))).

    再证(gcd((x+y),lcm(x,y))|gcd(x,y))

    (gcd((x+y),lcm(x,y))=k_0),则有(k_0|(x+y)). 若(k_0 mid x),则有(k_0 mid y),否则(k_0 mid (x+y)).

    而若(k_0 mid x,k_0 mid y),则(exists d1,d1mid k_0,d1 mid x;exists d2,d2mid k_0,d2 mid y).而(forall dmid lcm(x,y),有dmid x或dmid y),...好像不太对......不会证了

    // 待补

    Code

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    LL a, b;
    LL gcd(LL a, LL b) { return b ? gcd(b, a%b) : a; }
    void work() {
        LL k = gcd(a, b);
        LL delta = a*a - 4*k*b;
        if (delta < 0) { printf("No Solution
    "); return; }
        LL ssqrt = sqrt(delta);
        if (ssqrt*ssqrt != delta) { printf("No Solution
    "); return; }
        LL den = a+ssqrt;
        if (den&1) { printf("No Solution
    "); return; }
        LL x = den/2;
        LL y = a-x;
        if (x > y) swap(x, y);
        printf("%lld %lld
    ", x, y);
    }
    int main() {
        while (scanf("%lld%lld", &a, &b) != EOF) work();
        return 0;
    }
    
    
  • 相关阅读:
    Domino
    tomcat 部署 外网访问
    市场4
    android 源码下载编译
    SSIS
    代码审查工具
    mfc 常用控件
    屏蔽home
    MFC BEGIN_MESSAGE_MAP()
    社交产品
  • 原文地址:https://www.cnblogs.com/kkkkahlua/p/7668986.html
Copyright © 2011-2022 走看看