C语言----求两数最大公约数和最小公倍数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41026740/article/details/79513093

一、求两个数的最大公约数

算法1:普通法

先找出m和n的所有因数,然后找出符合要求的最大值。

#include<stdio.h>
#include<math.h>

int GreatestComDiv(int m,int n)
{
	int tmp;            //tmp为最大公因数
	for(int i;i<=m;i++)  //i为m、n的所有公因数
	{
		if(n%i==0&&m%i==0)
		{
			tmp = i;
		}
		return tmp;
}
	int main()
	{             //测试
		printf("%d\n",GreatestComDiv(10,15));
	        printf("%d\n",GreatestComDiv(15,10));
	        printf("%d\n",GreatestComDiv(10,100));
	        printf("%d\n",GreatestComDiv(10,33));
	
		return 0;
	}

算法2:辗转相除法

设r为m对n取余所得的值,然后将n赋值给m,将r的值赋值给n,如此循环操作,直到余数r的值为0时跳出循环,返回n的值。

#include<stdio.h>
#include<math.h>

int GreatestComDiv(int m,int n)
{
	int r;
	while((r=m%n) != 0)
	{
		m = n;
		n = r;
	}
	return n;
}
	int main()
	{
		printf("%d\n",GreatestComDiv(10,15));
	        printf("%d\n",GreatestComDiv(15,10));
	        printf("%d\n",GreatestComDiv(10,100));
	        printf("%d\n",GreatestComDiv(10,33));
	
		return 0;
	}

二、求两数的最小公倍数

两个数相乘除以最大公约数即为最小公倍数。

#include<stdio.h>
#include<math.h>

int GreatestComDiv(int m,int n)
{
	int r;
	while((r=m%n) != 0)
	{
		m = n;
		n = r;
	}
	return r;
}

int LeastComMult(int m,int n)
{
	int r = GreatestComDiv(m,n);  //调用求最大公约数函数
	int s;

	s = m/r*n;
	return  s;
}
	int main()
	{
		printf("%d\n",LeastComMult(1000000,150000000)); //测试
		printf("%d\n",LeastComMult(5,10));

		return 0;
	}
注意:上面程序中,m、n相乘会出现越界情况,以致结果发生错误。解决方法为m先除以r再乘n,可以避免错误发生。

以上为求两个数m、n最大公因数和最小公倍数的方法,欢迎各位同仁指正。

猜你喜欢

转载自blog.csdn.net/qq_41026740/article/details/79513093