C++求最大公约数和最小公倍数

常用算法:辗转相除法是求两个自然数的最大公约数的一种方法,也叫欧几里德算法

辗转相除法的原理如下:

例如,求(319,377):
319÷377=0(余319)
∴(319,377)=(377,319);
∵ 377÷319=1(余58)
∴(377,319)=(319,58);
∵ 319÷58=5(余29),
∴ (319,58)=(58,29);
∵ 58÷29=2(余0),
∴ (58,29)= 29;
∴ (319,377)=29.
通过辗转相除从而得到最大公约数,暂时想到这个方法。以后再进行补充,以备忘。求最小公倍数就是这

两个数的乘积除以最大公约数即是,所以关键的问题还是怎么求最小公约数。C++代码如下:

<span style="font-family:Times New Roman;">#include<cstdio>
   #include<cassert>
   #include<cmath>
   int main(){
	long  numA,numB,temp,mul;
	scanf("%d %d",&numA,&numB);
	if(numA<numB){
		temp=numA;
		numA=numB;
		numB=temp;
	}

	mul=numA*numB;
	while(numA%numB){
		temp=numA%numB;
		numA=numB;
		numB=temp;
	}
	printf("最小公倍数:%d\n",mul/numB);
	printf("最大公约数:%d\n",numB);
	return 0;
  }</span>



你可能感兴趣的:(算法,C语言)