求两个数的最大公约数和最小公倍数

解题思路---最大公约数

辗转相除法:

                        例如: a=24, b=18;

                              24%18==6

                              18%6==0

                  反复(除数%余数),直到余数为0时。此时除数即为最大公约数6。

一般定义法:

           首先我们知道一个数的约数一定在[1,n]区间之间。同时公约数一定从较小的数中开始查找(因为从大的开始查找,前面大于较小数的数字肯定不是公约数)。当较小数除以自己本身遍历的数字(从大到小)的余数为0时,说明此次遍历的数字就是较小数的约数,但如果较大数除以此约数的余数也是0,则此当前遍历的数字即为两者的最大公约数。

解题思路--最小公倍数

公式法: 最小公倍数==(num1 * num2)/ 两者最大公约数。

定义法: 

                首先一个数的倍数就是此数的倍数除以本数字的余数为0。因此最小公倍数应该从两者中的较大者开始向后遍历数字。当遍历的数字能被此两个数整除(余数为0),那么此遍历的数字即为最小公倍数。

#include
int main()
{
	int n1,n2;
	int a,b;
	int remain=0;
	puts("请输入两个整数:");
	scanf("%d%d",&n1,&n2);
	a=n1,b=n2;
	//循环辗转相除(大除小。由于小除大的余数还是小,下次循环时就转化成了大除小啦!)
	while(remain=a%b)
	{
		a=b;
		b=remain;
	}
	printf("%d与%d的最大公约数为:%d\n",n1,n2,b);

	//最小公倍数=a*b/最大公约数
	printf("%d与%d的最小公倍数为:%d\n",n1,n2,n1*n2/b);   //整数的倍数不可能带小数

你可能感兴趣的:(C语言,c语言,开发语言,c++,visual,studio,code,个人开发,gitee)