2013年4月10日
摘要: 题目链接:http://poj.org/problem?id=1061分析:两只青蛙若相遇的话,比满足方程(s*m+x)-(n*s+y)=k*l(其中,s为跳跃的次数,k为绕纬度线的圈数)方程整理得s*(n-m)+k*l=x-y(设gcd为(x-y)与k的最大公约数)这就是所谓的线性同余方程,一般表述为a*x+b*y=c;若该方程有解,必有c%gcd=0;解方程ax-by=gcd得特解x0,y0乘以c/gcd得原方程特解x1=x0*c/gcd,y1=y0*c/gcd.则原方程的一般解为x=x1+k*b/gcd;y=y1+k*a/gcd(k为常数)注:此类问题需要扩展欧几里得的基础,另外关于同余 阅读全文
posted @ 2013-04-10 19:52 行者1992 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 注:扩展欧几里得的解是不唯一的,假设x0,y0为特解,则其解系为:x=x0+k*(b/gcd),y=y0-k*(a/gcd)递归代码实现如下://其中ax,by为全局变量int ex_gcd(int a,int b){ if(b==0) { ax=1; by=0; return a; } gcd=ex_gcd(b,a%b); int temp=ax; ax=by; by=temp-a/b*by; return gcd;} 阅读全文
posted @ 2013-04-10 19:34 行者1992 阅读(202) 评论(0) 推荐(0) 编辑