赞
踩
int gcd(int a, int b){
return b == 0?a:gcd(a,a%b);
}
无论a>b还是b>a都适用。
因为,若a<b,那么显然会有a%b=a,也就会出现gcd(a,b)=gcd(b,a)显然成立。
求a与b的最大公约数:
①引理:如果有等式
a = k ∗ b + r a=k*b+r a=k∗b+r
r = a%b
成立, 那么a与b
和a与r(r=a%b)
有相同的公因式。
②假设d为a和b的最大公因式,即d|a, d|b。 r = a%b, 所以d|r。
设gcd是求两数的最大公约数函数,则可以表示为
很明显这里的m就是a和b的最大公约数了,其它公约数也一定是m的因数。
如果有等式
f = q ∗ g + r f=q*g+r f=q∗g+r
从式子中可以看出r是f除以g的余数。
成立, 那么f与g
和g与r(r=f%g)
有相同的公因式。
f = q ∗ g + r f=q*g+r f=q∗g+r
即证明 f f f, g g g 和$ g 、 、 、r$(r=f%g)有相同的公因式
我们可以将以上问题转化为证明:
$ g 、 、 、r 的 公 因 式 全 是 的公因式全是 的公因式全是 f 、 、 、g$的公因式
f f f, g g g 的公因式全是$ g 、 、 、r$的公因式
$ g 、 、 、r 的 公 因 式 公 因 式 全 是 的公因式公因式全是 的公因式公因式全是 f 、 、 、g$的公因式
①已知 f = q ∗ g + r f=q*g+r f=q∗g+r
②如果 x ∣ g x|g x∣g, x ∣ r x|r x∣r
③那么由①得, x ∣ f x|f x∣f
④∴ g,r的公因式, 全是g,f的公因式
f f f, g g g 的公因式公因式全是$ g 、 、 、r$的公因式
①已知 f = q ∗ g + r f=q*g+r f=q∗g+r
②如果 x ∣ f x|f x∣f, x ∣ g x|g x∣g
③那么x一定能整除它们的组合
r = f − q ∗ g r=f-q*g r=f−q∗g
这就说明: x是g、r的公约数
所以f、g的公约数,全是g、r的公约数
由引理可得, 如果d为f,g的最大公因式,那么d也是g,r(f%g)的最大公因式。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。