求正整数a和b的最大公约数和最小公倍数

点击查看代码
#include<cstdio>
#include<algorithm>	//swap()
using namespace std;
#pragma warning(disable:4996)

/* 使用递归方法求a与b的最大公约数(初始条件a>b,如果a<b则交换两者)
(1)递归式:gcd(a, b) = gcd(b, a % b)
(2)递归边界:gcd(a, 0) = a,0与任意一个整数a的最大公约数都是a(不是0) */
int gcd_func(int a, int b) {
	if (b == 0) return a;
	else return gcd_func(b, a % b);
}

int main() {
	int a = 4, b = 16;
	if (a < b) swap(a, b); //初始时固定a>b,如果a<b则交换两者,再求最大公约数
	int gcd = gcd_func(4, 16);	//4和16的最大公约数是4
	int lcm = a / gcd * b; //4和16的最小公倍数是16
	printf("%d %d\n", gcd, lcm);

	return 0;
}

posted @ 2022-09-28 22:39  zhaoo_o  阅读(40)  评论(0编辑  收藏  举报