求最小公倍数的有三种方式:
1、欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。计算公式gcd(a,b) = gcd(b,a mod b)。
求解过程:
有两整数a和b:
① a%b得余数c
② 若c=0,则b即为两数的最大公约数
③ 若c≠0,则a=b,b=c,再回去执行①
2、辗转相减法与辗转相除法相似。
求解过程:
有两整数a和b:
① 若a>b,则a=a-b
② 若a<b,则b=b-a
③ 若a=b,则a(或b)即为两数的最大公约数
④ 若a≠b,则再回去执行①
#include<stdio.h>
#include<stdlib.h>
int maxgx(int a,int b);
int zczc(int a,int b);
int xj(int a,int b);
int main()
{
int a,b,c;
int choose;
printf("请输入两个数字:");
scanf("%d %d",&a,&b);
printf("请选择哪种操作:");
scanf("%d",&choose);
do{
switch(choose)
{
case 1:
c=maxgx(a,b);
printf("最小公倍数:%d\n",c);
break;
case 2:
c=zczc(a,b);
printf("最小公倍数:%d\n",c);
break;
case 3:
c=xj(a,b);
printf("最小公倍数:%d\n",c);
break;
case 0:
exit(0);
default:
printf("请输入正确的操作数!\n");
break;
}
printf("请选择哪种操作:");
scanf("%d",&choose);
}while(choose!=0);
}
//穷举法
int maxgx(int a,int b)
{
if(a>0&&b>0)
{
int i=a;
for(i=a;i<=a*b;i+=a)
{
if(i%b==0)
{
return i;
}
}
return -1;
}
}
//辗转相除法(欧几里得算法)
int zczc(int a,int b)
{
int m=a*b;
int t;//t为临时变量
if(a<b)
{
t=a;
a=b;
b=t;
}
t=a%b;
while(t)
{
a=b;
b=t;
t=a%b;
}
return m/b;
}
//相减法
int xj(int a,int b)
{
int t=a*b;
while(a!=b)
{
if(a>b)
{
a=a-b;
}
else
{
b=b-a;
}
}
return t/b;
}