辗转相除法(欧几里得算法)时间复杂度:在O(logmax(a, b))以内int gcd(int a, int b){ if (b == 0) return a; return gcd(b, a % b);} 扩展欧几里得算法时间复杂度和欧几里得算法相同int extgcd(int a, int ....
分类:
其他好文 时间:
2015-07-26 23:59:26
阅读次数:
402
就像之前说的,接触到扩展欧几里得算法,是由于做到了这一题SWUSTOJ青蛙的约会之二(0481)http://www.cnblogs.com/haveyoueverbeen/p/4483218.html(查看题目信息可以戳上面的地址)解题思路:设输出结果为s,则(m*s+x)-(n*s+y)=kl(...
分类:
编程语言 时间:
2015-07-01 13:42:25
阅读次数:
129
关于扩展欧几里得算法(ExtendedEuclideanAlgorithm),我是在做青蛙的约会这一经典题目才接触到这个算法的。后面也有关于这一题的AC代码和解题思路。内容:已知a,b,求解一组x,y,使它们满足贝祖等式:ax+by=gcd(a,b)扩展欧几里得算法,就和它的名字一样是对欧几里得算法...
分类:
编程语言 时间:
2015-07-01 12:05:27
阅读次数:
134
证明:设 a>b。
推理1,显然当 b=0,gcd(a,b)=a。此时 x=1,y=0;//推理1
推理2,a*b!=0 时
设 ax1+by1=gcd(a,b);
bx2+(a mod b)y2=gcd(b,a mod b);
根据朴素的欧几里德原理有 gcd(a,b)=gcd(b,a mod b);
则:ax1+by1=bx2+(a mod b)y2;
即:ax1+by1=bx2+...
分类:
编程语言 时间:
2015-05-14 23:50:21
阅读次数:
177
这是我算法学习标签下的第一篇随笔,首先我想声明,在看了很多博客后,我的想法就是,尽量不去盲目复制别人的东西,一个原因是盲目复制不一定能发现其文章中的错误,二是可以加深自己的理解程度,并且将博客写得通俗易懂,转载别人的东西一定要注明出处。还有我的一个习惯就是,把东西写短一点,所以有可能会将一个本来应在...
分类:
编程语言 时间:
2015-05-14 11:34:01
阅读次数:
111
设a与b是非零整数,g=gcd(a,b).方程ax+by=g总是有一个整数解(x1,y1) (可利用扩展欧几里得算法解出),则方程的每一个解可由(x1+k*b/g,y1-k*a/g)得到,其中k可为任意整数。证明:先证明ax+by=1的情况(此时设gcd(a,b)=1)。 (1)若(x,y)是(1)...
分类:
其他好文 时间:
2015-04-22 23:57:06
阅读次数:
220
欧几里得算法:用于求两个非负整数a、b的最大公因数(用gcd(a,b)表示)。这里用d表示,假设d一定存在。证明:由题设知d|a,d|b(d|a代表d能整除a,即a mod d=0)设a=kb+r,这里k和r都是整数。则r=a mod b。我们可以让a=n1d,b=n2d。则r=(n1-k*n2)d...
分类:
编程语言 时间:
2015-04-05 09:01:17
阅读次数:
126
欧几里得算法与扩展欧几里得算法递归写法gcdint gcd(int a,int b){ return !a ? b : gcd(b%a,a); }扩欧struct value{ int x,y; value(int x,int y):x(x),y(y){} };value ExtEuclid(int...
分类:
其他好文 时间:
2015-03-21 18:26:26
阅读次数:
135
题目大意:
有一个天平,还有质量为a和质量为b的砝码,砝码的数量不限且天平左右两端均可放砝码,现在要求
在天平上惩处质量为c的物品。那么问题来了:怎样放置砝码,才能使放置的砝码数量尽可能的少;当
砝码数量相同时,总质量尽可能的少。
思路:
假设放置x个质量为a的砝码和y个质量为b的砝码,题目就变为了求解a*x + b*y = c的其中一组解,使
得|x| + |y|尽可能小,若相等,则a|x| + b|y|尽可能小。设d = gcd(a,b),首先用扩展欧几里得算法出
a/d*x + b/d*y = c/...
分类:
其他好文 时间:
2015-03-19 22:07:40
阅读次数:
141