短除法,又称欧几里得算法,是一种用于求解两个正整数的最大公约数(Greatest Common Divisor,简称GCD)的经典算法。同时,它也可以帮助我们快速计算这两个正整数的最小公倍数(Least Common Multiple,简称LCM)。
下图是一个小案例,帮助你理解短除法的过程:
最大公因数 gcd = 3 x 7 = 21
最小公倍数 lcm = 3 x 7 x 4 x 3 = 252
代码如下:
#include <stdio.h>
void Short_division(int x,int y);
int main(){
int x,y;
printf("请输入两个正整数x,y:");
scanf("%d %d",&x,&y);
Short_division(x,y);
}
void Short_division(int x,int y){//短除法
int i=0,j=0,gcf=1,lcm=1;
int a[100]={0};
for(i=2;i<=x && i<=y;i++){//从2开始除
while(x%i==0&&y%i==0){
printf("%4d",i);
printf("%4d",x);
printf("%4d\n",y);
a[j++]=i;
x=x/i;//更新x的值
y=y/i;//更新y的值
}
}
printf("%8d",x);
printf("%4d\n",y);
for(i=0;i<j;i++){
gcf=gcf*a[i];
}
lcm=gcf*x*y;//此处x,y为短除后留下的余数
printf("\n最大公因数 gcf = %d\n",gcf);
printf("\n最小公倍数 lcm = %d\n",lcm);
}