1. 程式人生 > >HDU 2669 Romantic (擴展歐幾裏得定理)

HDU 2669 Romantic (擴展歐幾裏得定理)

include ont roman 兩個 class AI ans cal -a

題目大意:給兩個數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\n"); else printf("%lld %lld\n",ans,(1-ans*a)/b); }
return 0; }

HDU 2669 Romantic (擴展歐幾裏得定理)