扩展欧几里德算法求的是二元一次方程ax+by=c,在a,b,c已知的情况下x的最小整数值,
扩展欧几里德算法:
int r=exgcd(a,b,X,Y)
当c%r==0时:
b/=r;
c/=r;
x的最小整数值x1=(c*X%b+b)%b
否则不存在x的最小整数解。
题目poj 1061
这题先列出式子,设跳了xi步之后他们会相遇。则有公式
(xi*m+x)-(xi*n+y)=kl(k=1,2,3.....)或者(xi*n+y)-(xi*m+x)=kl(k=1,2,3.....)
化简成xi(m-n)+kl=y-x或者xi(n-m)+kl=x-y。
刚好符合扩展欧几里德的公式要求,a=m-n(m>n)或者n-m(n>m),b=k,c=y-x(m>n)或者x-y(n>m),这样套扩展欧几里德公式求xi的最小正整数就行了,代码