BIT1052 poj1061 青蛙的约会
2013-02-03 17:13
183 查看
拿了以前在pojAC的代码一交,WA了。。。
重写了、
根据题意有
p+m*k=q+n*k (mod L)
化简
p-q+(m-n)k=(k')*L
再化简
(m-n)*k+k'*(-L)=q-p
另a=m-n,b=-L
a*k+b*k'=q-p
这就可以用扩展欧几里德了
重写了、
根据题意有
p+m*k=q+n*k (mod L)
化简
p-q+(m-n)k=(k')*L
再化简
(m-n)*k+k'*(-L)=q-p
另a=m-n,b=-L
a*k+b*k'=q-p
这就可以用扩展欧几里德了
#include<iostream> #include<algorithm> using namespace std; long long x,y; long long extended_gcd(long long a,long long b) { long long t,gcd; if(b==0) { x=1; y=0; return a; } gcd=extended_gcd(b,a%b); t=x; x=y; y=t-a/b*y; return gcd; } int main() { long long p,q,m,n,l; while(~scanf("%lld %lld %lld %lld %lld",&p,&q,&m,&n,&l)) { long long a=m-n; long long b=-1*l; long long d=extended_gcd(a,b);//求出d公约数,同时求出(a/d)*k+(b/d)*k'=1的一组解 if((q-p)%d!=0) { printf("Impossible\n"); continue; } long long k=x*(q-p)/d;//获得k的一个解 //k的通解为k+b/d*n n为1,2,3,, k%=(b/d); if(b/d>0) { while(k<0) { k+=b/d; } } if(b/d<0) { while(k<0) { k-=b/d; } } printf("%lld\n",k); } return 0; }
相关文章推荐
- POJ 1061 青蛙的约会
- poj 1061 青蛙的约会(用欧几里得解线性方程)
- POJ 1061 青蛙的约会
- POJ 1061 青蛙的约会
- POJ 1061青蛙的约会【扩展欧几里德算法】
- POJ - 1061 青蛙的约会(拓展GCD
- POJ 1061 青蛙的约会(数论一元线性同余)
- POJ 1061 青蛙的约会
- 扩展整数poj 1061 青蛙的约会 扩展欧几里得
- poj1061 青蛙的约会(扩展欧几里德)
- poj 1061 青蛙的约会
- poj 1061 青蛙的约会 扩展欧几里得算法
- POJ 1061 - 青蛙的约会(线性同余方程)
- 青蛙的约会(扩展欧几里得) POJ - 1061
- 【题解】扩展欧几里德 POJ1061 青蛙的约会
- POJ 1061 青蛙的约会(拓展欧几里得)
- poj 1061 青蛙的约会(拓展欧几里德)
- POJ 1061 青蛙的约会
- poj 1061 青蛙的约会 【扩展欧几里得】
- POJ 1061 青蛙的约会(扩展欧几里德)