2013年4月28日

nefu84 - 五指山

摘要: 扩展欧几里德算法列方程dt-ln = y-x求基础解,在求最小t解代码如下:#include void gcd(long long a, long long b,long long &d,long long &x, long long &y) { if(b==0) {x = 1; y = 0; d = a;} else {gcd(b,a%b,d,y,x); y-=(a/b)*x;} } int main () { long long n, d, x, y; int cas; scanf("%d",&cas); while(cas--) ... 阅读全文
posted @ 2013-04-28 21:38 Primo... 阅读(113) 评论(0) 推荐(0)

poj1061 - 青蛙的约会

摘要: 认真读题,画坐标图,得出方程:(n-m)t + k*L = (x-y)运用扩展欧几里德,解出一个基本解,然后由这个基本解,计算出最小的x值因为得到的基本解中x不一定是尽量小的正整数。所以我们要换算由于x的变化通式是x+k*bb;k 为任意整数,bb = b/gcd;所以最小的x是(x%bb+bb)%bb;代码如下:#include void gcd(long long a, long long b,long long &d,long long &x, long long &y) { if(b==0) {x = 1; y = 0; d = a;} else {gcd(b, 阅读全文
posted @ 2013-04-28 20:27 Primo... 阅读(148) 评论(0) 推荐(0)

扩展欧几里德算法

摘要: 自己写出来的代码,求方程aX+bY=c的任意10组解。代码如下;#include void gcd(int a, int b, int &x, int &y, int &d) { if(b==0) {d = a; x = 1; y = 0;} else {gcd(b,a%b,y,x,d); y -= (a/b)*x;} } int main () { int a, b, c; while(scanf("%d%d%d",&a,&b,&c)==3) { int x, y, g; gcd(a,b,x,y,g); ... 阅读全文
posted @ 2013-04-28 19:35 Primo... 阅读(130) 评论(0) 推荐(0)