[GCD, LCM]최대 공약수, 최소 공배수
GCD : Greatest Common Divisor
$O(N)$
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
	int g = 0;
	int a = 0, b = 0;
	scanf("%d%d", &a, &b);
	for (int i = 1; i <= min(a, b); i++) {
		if (a%i == 0 && b%i == 0) {
			g = i;
		}
	}
	printf("%d\n", g);
	return 0;
}
유클리드 호제법 : 재귀
#include <iostream>
#include <algorithm>
using namespace std;
int gcd(int a, int b) {
	if (a < b) gcd(b, a);
	if (b == 0) return a;
	else gcd(b, a%b);
}
int main() {
	int g = 0;
	int a = 0, b = 0;
	scanf("%d%d", &a, &b);
	printf("%d\n", gcd(a,b));
	return 0;
}
유클리드 호제법 : 비재귀
#include <iostream>
#include <algorithm>
using namespace std;
int gcd(int a, int b) {
	if (a < b) gcd(b, a);
	while (b != 0) {
		int	t = a;
		a = b;
		b = t % b;
	}
	return a;
}
int main() {
	int g = 0;
	int a = 0, b = 0;
	scanf("%d%d", &a, &b);
	printf("%d\n", gcd(a,b));
	return 0;
}
N개 수의 GCD
#include <iostream>
#include <algorithm>
using namespace std;
int gcd(int a, int b) {
	if (a < b) gcd(b, a);
	while (b != 0) {
		int	t = a;
		a = b;
		b = t % b;
	}
	return a;
}
int main() {
	int g = 0;
	int a = 0, b = 0, c = 0;
	scanf("%d%d%d", &a, &b, &c);
	printf("%d\n", gcd(gcd(a,b),c));
	return 0;
}
LCM : Least Common Multiple
- g = 최소공배수
- A = a*g
- B = b*g
- LCM = abg = A * B / g
#include <iostream>
#include <algorithm>
using namespace std;
int gcd(int a, int b) {
	if (a < b) gcd(b, a);
	while (b != 0) {
		int	t = a;
		a = b;
		b = t % b;
	}
	return a;
}
int lcm(int a, int b) {
	return a * b / gcd(a, b);
}
int main() {
	int g = 0;
	int a = 0, b = 0;
	scanf("%d%d", &a, &b);
	printf("GCD : %d\n", gcd(a,b));
	printf("LCM : %d\n", lcm(a, b));
	return 0;
}
