·最大公约数 gcd 辗转相除法 gcd(a,b)=gcd(b,a%b) 效率O(logn) ·最小公倍数 lcm 可由最大公约数推来 lcm(a,b)=a*b/gcd(a,b) 效率O(logn) ·扩展欧几里得 extgcd 求ax+by=gcd(a,b)的整数对(x,y) 也可由gcd推过来 ...
分类:
其他好文 时间:
2017-11-05 22:30:29
阅读次数:
172
又是毕业季2 n/k; 又是毕业季2 一开始很容易想到枚举n个数取k个的所有组合,然后分别用辗转相除法求最大公约数,但是复杂度明显不符合要求,于是必须换一种思路。 我们想到,k个数的公约数含义就是这k个数均含有某个因数,如果我们把所有数的因数全部求出来,发现有k个数均含有某个因数,那么这个数必然是这 ...
分类:
其他好文 时间:
2017-10-16 16:37:55
阅读次数:
104
辗转相除法求两个数的最大公约数的步骤如下:先用小的一个数除大的一个数,得第一个余数;再用第一个余数除小的一个数,得第二个余数;又用第二个余数除第一个余数,得第三个余数;这样逐次用后一个数去除前一个余数,直到余数是0为止.那么,最后一个除数就是所求的最大公约数(如果最后的除数是1,那么原来的两个数是互 ...
分类:
其他好文 时间:
2017-10-12 17:51:35
阅读次数:
161
这个随笔是算是我博客数学类的第一条吧,觉得还是写点感想的好。话说这个算法里的数学类一般就是解决一些容斥呀,数论呀,或者是组合数学之类的问题。但老实说,这只是狭义上的数学,但我们用什么数据结构啊,什么dp呀,什么图论呀,都应归属于广义上的数学。所以,无论是谁,都应该将数学作为自己的最强辅助。对于理论性 ...
分类:
编程语言 时间:
2017-10-06 12:30:58
阅读次数:
206
记gcd(a,b)为a,b的最大公约数 记lcm(a,b)为a,b的最小公倍数 可知lcm=a*b/gcd,由于a*b可能过大,我们写成lcm=a/gcd*b 辗转相除法求gcd 递归写法: 几个小公式: gcd(ka, kb) = k * gcd(a, b) lcm(ka, kb) = k * l ...
分类:
其他好文 时间:
2017-10-04 20:00:08
阅读次数:
134
求两数最大公约数的方法有很多,这里重点介绍这两种算法: 辗转相除法 和 更相减损法。 1、辗转相除法。 在两个数中,找出大数,用大数除以小数,得到整数商和余数,然后再不断地用除数(原来的小数)除以余数,直到没有余数为止。 那么除数即为最大公约数。 所以我们可以用一个循环来进行被除数、除数和余数之间的 ...
分类:
编程语言 时间:
2017-10-03 20:09:30
阅读次数:
305
1.更相减损法 2.辗转相除法--递归 3.辗转相除法--纯循环 ...
分类:
编程语言 时间:
2017-09-22 21:03:33
阅读次数:
161
一、概念引入 GCD,全名Greatest common divisor(最大公因数)。 我们以gcd(a,b)表示a与b的最大公因数。 二、欧几里得算法(又名辗转相除法) 用途: 求解gcd(a,b) 核心公式: gcd(a,b) = gcd(b,a mod b) (其中a mod b > 0) ...
分类:
编程语言 时间:
2017-09-16 18:49:06
阅读次数:
269
具体内容参见紫书p310-p312 一、辗转相除法 恒等式:gcd(a,b) = gcd(b,a%b) 边界条件:gcd(a,0) = a 辗转相除法的关键(恒等式)和边界条件一起构成了下面的程序: 这个算法称为欧几里得算法!!!! 二、求lcm 公式:gcd(a,b) * lcm(a,b) = a ...
分类:
编程语言 时间:
2017-09-10 11:22:55
阅读次数:
112
一:欧几里得算法(辗转相除法) 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b)。 证明: a可以表示成a = kb + r,则r = a mod b 假设d是a,b的一个公约数,则有 d|a, d|b,而r = a ...
分类:
编程语言 时间:
2017-09-09 10:44:57
阅读次数:
306