POJ1061
2011-08-10 12:47
120 查看
题意:中文描述的.
分析:设青蛙跳了t次,那么就有(x+mt)-(y+nt)=p*L.
即x-y+(m-n)t=p*L,即(m-n)*t≡(y-x) (mod L).
这个线性同余方程有解当且仅当gcd(m-n,L)|(y-x).
令a=m-n,b=L,c=y-x.用扩展欧几里得解方程ax+by=c.
可以求出原方程的一个解.如何求最小正整数解呢?
假设我们已经得到一个x0,令d=gcd(m-n,L),
那么所有解可以表示为x=x0+k*L/d.
设L'=L/d.
Xmin=(x0 mod L'+L') mod L'.
code:
分析:设青蛙跳了t次,那么就有(x+mt)-(y+nt)=p*L.
即x-y+(m-n)t=p*L,即(m-n)*t≡(y-x) (mod L).
这个线性同余方程有解当且仅当gcd(m-n,L)|(y-x).
令a=m-n,b=L,c=y-x.用扩展欧几里得解方程ax+by=c.
可以求出原方程的一个解.如何求最小正整数解呢?
假设我们已经得到一个x0,令d=gcd(m-n,L),
那么所有解可以表示为x=x0+k*L/d.
设L'=L/d.
Xmin=(x0 mod L'+L') mod L'.
code:
var x,y,n,m,l,a,b,c,d,xx,yy:int64; function exgcd(a,b:int64; var x,y:int64):int64; var t:int64; begin if b=0 then begin exgcd:=a; x:=1; y:=0; end else begin exgcd:=exgcd(b,a mod b,x,y); t:=x; x:=y; y:=t-a div b*y; end; end; begin readln(x,y,m,n,l); a:=m-n; b:=l; c:=y-x; if a<0 then begin a:=-a; c:=-c; end; d:=exgcd(a,b,xx,yy); if c mod d<>0 then writeln('Impossible') else begin xx:=xx*c div d; yy:=yy*c div d; l:=l div d; xx:=(xx mod l+l) mod l; writeln(xx); end; end.
相关文章推荐
- poj 1061 青蛙的约会
- hihoCoder 1297 扩展欧几里德 && POJ 1061 青蛙的约会
- POJ 1061:青蛙的约会_扩展欧几里得
- [poj1061]: 青蛙的约会(扩展欧几里得)
- POJ 1061 青蛙的约会(拓展欧几里得算法求解模线性方程组详解)
- POJ - 1061 青蛙的约会(拓展GCD
- POJ 1061(不定方程的最小正整数解)
- 青蛙的约会---poj1061(扩展欧几里德)
- POJ 1061 青蛙的约会
- POJ 1061
- poj 1061 扩展欧几里得解同余方程(求最小非负整数解)
- 20140714 「初等数论 - 拓展欧几里得+同余模方程」POJ 1061 青蛙的约会
- 【POJ 1061 青蛙的约会】 + 扩展欧几里德
- poj 1061
- poj 1061 扩展欧几里得
- poj 1061 青蛙的约会
- POJ 1061(转)扩展欧几里德
- POJ 1061-青蛙的约会(拓展欧几里得)
- 题解 基础数论 POJ 1061
- poj 1061 青蛙的约会