poj 1061 扩展gcd
来源:互联网 发布:js style.display 编辑:程序博客网 时间:2024/06/11 08:34
Description
我们把这两只青蛙分别叫做青蛙A和青蛙B,并且规定纬度线上东经0度处为原点,由东往西为正方向,单位长度1米,这样我们就得到了一条首尾相接的数轴。设青蛙A的出发点坐标是x,青蛙B的出发点坐标是y。青蛙A一次能跳m米,青蛙B一次能跳n米,两只青蛙跳一次所花费的时间相同。纬度线总长L米。现在要你求出它们跳了几次以后才会碰面。
Input
Output
Sample Input
1 2 3 4 5
Sample Output
4
题意:
是中文的就不用解释了
题解:
(x+ m * t )% L == ( y + m * t ) % L
=>> (x+ m * t )- ( y + m * t ) == L*k
=>> ( n-m ) *t + L *k == x - y
类比 a * x + b * y ==gcd (a,b)
x= t 表示步数 ,y = k 表示走过了多少长度为 L 的圈
对于扩展欧几里得算法递归调用解释如下
对于a*x+b*y=d
当 d==gcd( a , b) * k ( k=... -2, -1, 0 ,1 ,2,3..... ) 时候, x y 才会有整数解(自己思考原因)
递归调用时
令a=b;b=a%b;
将其变为形式2) b*x+a%b*y=d
变形:b*x+a*y-(a/b)*b*y=d ( a/b 为整数 )
变形:a*y+b*x-(a/b)*b*y=d
再变:a*y+b(x-a/b*y)=d
再变:b*y+a%b(x-a/b*y)=d
与2式比较: b*x+a%b*y=d
得:
当a=b;b=a%b时:x=y;y=x-a/b*y
调用过程中的x,y就是对应的a,b的解
当回到顶层时,a,b就是最初的a,b所以此时的x,y就是所求解
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;#define LL long longLL gcd(LL a,LL b){ LL temp; while(b) { temp=a%b; a=b; b=temp; } return a;}void ex_gcd(LL a,LL b,LL &x,LL &y){ if(b==0){ x=1,y=0; return ; } ex_gcd(b,a%b,x,y); int t=x; x=y; y=t-a/b*y; return ;}int main(){ LL x,y,m,n,l; //freopen("in.txt","r",stdin); while(scanf("%I64d%I64d%I64d%I64d%I64d",&x,&y,&m,&n,&l)!=EOF) { LL t1=0,t2=0; LL a=n-m; LL b=l; LL c=x-y; LL temp=gcd(a,b); if(c%temp){ puts("Impossible"); continue; }//----------方程约分-----------------// a/=temp; b/=temp; c/=temp; ex_gcd(a,b,t1,t2);//----------方程同时乘以c------------////-------保证等式右边为正数----------////---只有为正整数的时候才符合题意----// t1=c*t1; t1=t1%b; while(t1<0) t1+=b; printf("%I64d\n",t1); } return 0;}
- poj 1061 扩展gcd
- POJ 1061扩展gcd
- poj 1061 扩展GCD
- POJ 1061 青蛙的约会 (扩展GCD)
- POJ 1061 青蛙的约会 【扩展GCD】
- poj-1061青蛙的约会 扩展GCD
- poj 1061 青蛙的约会 扩展gcd
- poj 1061 青蛙的约会 (扩展gcd, 模线性方程)
- poj 1061 青蛙的约会(扩展gcd)
- POJ 1061 扩展gcd 线性同余方程
- poj 1061 青蛙的约会 数论扩展GCD
- poj 1061 青蛙的约会 扩展gcd的简单应用
- poj 1061 青蛙的约会(扩展gcd)
- POJ 2115 C Looooops 扩展gcd
- poj 1060---青蛙的约会 【扩展GCD】
- POJ 1061 青蛙的约会(扩展GCD求模线性方程)
- POJ 1061 青蛙的约会(初遇扩展gcd--解最小正整数解)
- 【扩展GCD】
- HDU 1045(二分图)
- 元素分类--块级元素
- cookie机制与session机制的区别
- Spring Boot 入门
- poj3253Fence Repair(贪心,哈夫曼编码)
- poj 1061 扩展gcd
- SAX解析xml
- 利用linux shell script来测试linux c程序------脚本自动化测试用例代替手动测试用例
- Android ViewSwitcher简介和使用
- PHPExcel中文开发手册翻译版(2-2)
- 获取Android设备唯一标识码
- svn 提交代码时 报错: is scheduled for addition, but is missing
- gRPC动手实践
- 浅谈C++中指针和引用的区别