HDURomantic
扩展欧几里得解决线性同余方程。先得到gcd的解,再恢复原解,因为知道通解的一般形式,所以通过模来得到最小正整数解。另一个可以通过相减,或者一样的操作。一个增加,另一个一定减少。
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll x,y; ll ex_gcd(ll a,ll b,ll &x,ll &y) { if(b==0){x=1,y=0;return a;} ll d=ex_gcd(b,a%b,x,y); ll temp=x; x=y;y=temp-a/b*y; return d; } int a,b; int main() { while(~scanf("%d%d",&a,&b)) { ll c=1; ll k=ex_gcd(a,b,x,y); if(c%k!=0) printf("sorry\n"); else { ll p=c/k; x*=p;x=(x%b+b)%b;y*=p;y=(y%a-a)%a; //y=(c-a*x)/b; cout<<x<<" "<<y<<endl; } } return 0; }