题目描述
输入两个正整数m和n,求其最大公约数和最小公倍数。
C代码
#include <stdio.h>
#include <math.h>
int gcd(int a,int b){
// Greatest Common Divisor
// 辗转相除法求最大公约数
if(a%b == 0){
return b;
}else{
return gcd(b,a%b);
}
}
int lcm(int a,int b){
// Least Common Multiple
// 利用最小公倍数与最大公约数之间的关系
return a*b/gcd(a,b);
}
int main(){
int m;
int n;
printf("请输入两个整数:\n");
scanf("%d%d",&m,&n);
// 最简单的方法肯定是遍历,时间复杂度为O(n)
if(m<n){
int temp = m;
m = n;
n = temp;
}
int divisor = gcd(m,n);// 辗转相除法参数中第一个是较大的那个数
int multiple = lcm(m,n);
printf("\n两数的最大公约数为:%d\n",divisor);
printf("\n两数的最小公倍数为:%d\n",multiple);
return 0;
}