zoukankan      html  css  js  c++  java
  • HDU 2669 Romantic (扩展欧几里得定理)

    题目大意:给两个数a和b,找出一组x,y使得a*x + b*y = 1,如果找不出输出sorry
     
    题解:显然是用扩展欧几里得定理求解。
    又扩展欧几里得定理有,如果a*x+b*y = d   要使得方程有解必有gcd(a,b)为d的约数。
    而此题的d = 1  所以若gcd(a,b)!=1,则应该输出sorry
    #include <bits/stdc++.h>
    
    using namespace std;
    
    
    long long e_gcd(long long a,long long b,long long &x,long long &y)
    {
        if(b==0)
        {
            x=1;y=0;
            return a;
        }
        long long ans=e_gcd(b,a%b,x,y);
        long long temp=x;
        x=y;
        y=temp-a/b*y;
        return ans;
    }
    
    long long cal(long long a,long long b,long long c)
    {
        long long x,y;
        long long gcd=e_gcd(a,b,x,y);
        if(c%gcd) return -1;
        long long k=c/gcd;
        x*=k,y*=k;//相当于x=x0+b/gcd*c
        if(b<0) b=-b;
        long long ans=x%b;//最小的x
        if(ans<=0) ans+=b;
        return ans;
    }
    
    int main()
    {
        long long a,b;
        while(cin>>a>>b)
        {
            long long ans=cal(a,b,1);
            if(ans==-1) printf("sorry
    ");
            else printf("%lld %lld
    ",ans,(1-ans*a)/b);
        }
        return 0;
    }
  • 相关阅读:
    bzoj1467 Pku3243 clever Y
    bzoj2242 [SDOI2011]计算器
    卡特兰数
    洛谷P1290 欧几里得的游戏
    bzoj2277 [Poi2011]Strongbox
    poj2406 Power Strings
    Codeforces 892 D.Gluttony
    Codeforces 892 C.Pride
    Codeforces 892 B.Wrath
    Codeforces 892 A.Greed
  • 原文地址:https://www.cnblogs.com/Fy1999/p/8783489.html
Copyright © 2011-2022 走看看