数论入门1——最大公约数与最小公倍数

gcd(a, b),就是求a和b的最大公约数

lcm(a, b),就是求a和b的最小公倍数

欧几里德算法又称辗转相除法,是指用于计算两个正整数a,b的最大公约数。应用领域有数学和计算机两个方面。。下面记几个公式,证明以后再补。

1.gcd(a,b)=gcd(b,a)=gcd(-a,b)=gcd(|a|,|b|)

2.gcd(a,b) = gcd(b,a mod b);

3.a,b互质等价于gcd(a,b) = 1;

4.a*b = gcd(a,b)*lcm(a,b);

5.由上一个公式可得,lcm(a,b) = a*b/gcd(a,b) = a/gcd(a,b)*b(防止溢出)

最大公约数求法

递归求法:

//递归做法
	public static int gcd1(int a,int b)
	{
		if(b == 0)
		{
			return a;
		}
		return gcd1(b,a%b);
	}

循环求法:

//循环做法
	public static int gcd2(int a,int b)
	{
		int r;
		while(b != 0)
		{
			r = a%b;
			a = b;
			b = r;
		}
		return a;
	}

另一种写法是:

public static int gcd3(int a,int b)
	{
		return b != 0?gcd3(b,a%b):a;
	}

最小公倍数:

public static int lcm(int a,int b)
	{
		return a/gcd1(a,b)*b;
	}

另外还有几个公式:

gcd(ka, kb) = k * gcd(a, b)

lcm(ka, kb) = k * lcm(a, b)

lcm(S/a, S/b) = S/gcd(a, b)

嗯,我也不会证。。

参考Blog:

https://www.cnblogs.com/linyujun/p/5167914.html

https://blog.csdn.net/qq_35821988/article/details/78885910

https://blog.csdn.net/u011409995/article/details/33727557


猜你喜欢

转载自blog.csdn.net/qq_34229351/article/details/80300644