版权声明:本文为博主原创文章,未经博主允许不得转载。 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最大公因数和最小公倍数的方法,欢迎各位同仁指正。