最大公约数与最小公倍数

最大公约数与最小公倍数

  1. 最大公约数与最小公倍数的概念与关系
  2. 最大公约数与最小公倍数的实现

1.最大公约数与最小公倍数的概念与关系

概念:

  • 最大公约数: 两个或多个[整数]公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数
  • 最小公倍数:两个或多个[整数]公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。

关系:两个数的乘积等于这两个数的最大公约数与最小公倍数的乘积

2. 最大公约数与最小公倍数的实现

代码如下

#include 
using namespace std;

int a, b;

int gcd1(int a, int b){//辗转相除法
	int temp = b; 
	while (a % b != 0){
	    temp = a % b;
		a = b;
		b = temp;
	}
	return temp;
}

int gcd2(int a, int b){//简写版——竞赛常用
	return (a % b == 0 ? b : gcd2(b, a % b));
}

int gcd3(int a, int b){//辗转相减法
	while(a != b){
		if(a > b){
			a = a - b;
		}
		else{
			b = b - a;
		}
	}
	return a;	
}

int lcm(int a, int b){//最小公倍数
	return a * b / gcd1(a, b);
}
int main(){
	cin >> a >> b;
	cout << gcd3(a, b) << endl;
	cout << lcm(a, b) << endl;
	return 0;
}

总结

  1. 通常竞赛用gcd2,简洁。
  2. 如何理解辗转相除法?返回余数,“辗转”——a = b, b = 余数
  3. 最小公倍数只要记得这个就行了——两个数的乘积等于这两个数的最大公约数与最小公倍数的乘积

你可能感兴趣的:(算法,c++)