【算法】扩展欧几里德算法(模线性方程)
【题解】http://hzwer.com/2121.html
一些问题写在http://www.cnblogs.com/onioncyc/p/6146143.html
PS:下述代码有问题,具体看上面网站。
#include<cstdio> #include<algorithm> #define ll long long using namespace std; ll A_,B_,m,n,L; void gcd(ll a,ll b,ll& g,ll& x,ll& y) { if(!b){g=a;x=1;y=0;} else{gcd(b,a%b,g,y,x);y-=(a/b)*x;} } int main() { scanf("%lld%lld%lld%lld%lld",&A_,&B_,&m,&n,&L); ll a=m-n,b=L,c=B_-A_,g,x,y; gcd(a,b,g,x,y); if(c%g){printf("Impossible");return 0;} x=((x*c/g)%L+L)%L; if(!x)x+=L/g; printf("%lld",x); return 0; }