目录
用递归和非递归方法求最大公约数和最小公倍数
首先:什么是最大公约数,废话不多说,直接上图
最小公倍数 = (x*y)/最大公约数
方法一、简单方法
#include <stdio.h>
int main()
{
// 最大公约数
int x = 12 ,y = 18;
int min;
if(x>y){
min = y;
} else{
min = x;
}
int i ;
int res = 0;
for (i = 1;i<= min;i++){
if(x%i==0){
if(y%i==0){
res = i;
}
}
}
printf("%d和%d的最大公约数为:%d\n",x,y,res);
}
方法二、辗转相除法(欧几里得算法)
#include <stdio.h>
// 非递归
// 最大公约数
int gcd(int x,int y){
int t;
while (y!=0){
t = x%y;
x = y;
y = t;
}
return x;
}
// 最小公倍数
int lcm(int x,int y){
return x*y/gcd(x,y);
}
int main()
{
int x,y;// 辗转相除法求最大公约数
scanf("%d %d",&x,&y);
printf("最大公约数gcd=%d\n",gcd(x,y));
printf("最小公倍数lcm=%d",lcm(x,y));
return 0;
}
方法三、递归
# include <stdio.h>
// 最大公约数 递归:辗转相除法
int Gcd(int a,int b){
if(b>0){
return Gcd(b,a%b);
}else{
return a;
}
}
// 最小公倍数
int Lcm(int x,int y){
return (x*y)/Gcd(x,y);
}
int main()
{
int a,b;
scanf("%d %d",&a,&b);
printf("最大公约数为:%d\n",Gcd(a,b));
printf("最小公倍数为:%d",Lcm(a,b));
return 0;
}