1、数学求解最大公约数与最小公倍数的方法—分解质因式法
1.1 原理
最大公约数:两个数共有的约数中最大的一个。
假设两个数A,B。他们的公约数t的范围1<t<=Min(A,B)
最小公倍数:两个数公有的最小倍数。
一直除下去,直到A和B这两个数,没有共同的除数之后,左边R之间的乘积就是最大公约数,即RR1。
最小公倍数就是RR1A2B2。
1.2 编码流程
1、我们写一个循环判断程序,循环终止条件是A和B中的最小值。判断A和B的共同约数最大为多少。
printf("please input\n");
scanf("%d%d",&m,&n); //输入要求公约数与公倍数的两个数m,n
if(m<n)
t=m; //判断m,n中的最小值,把它赋值给t;
else
t=n;
for(i=1;i<=t;i++)
{
if(m%i||n%i) //m和n余数只要有一个不为零,就结束这次循环,进入下一次循环
{
continue;
}
else //m和n都为零时,更新公约数变量
{
r=i;
}
}
循环结束之后,r中存放的就是m和n中最大的公约数。
2、求最小公倍数,就是先求出谁乘以最大公约数各自等于m和n,把求出各个数字乘起来,再乘以最大公约数就是最小公倍数。
y=r*(m/r)*(n/r)*r;
1.3 完整代码如下:
#include<stdio.h>
int main()
{
int m ,n,y,r,i,t;
printf("please input\n");
scanf("%d%d",&m,&n);
if(m<n)
t=m;
else
t=n;
for(i=1;i<=t;i++)
{
if(m%i||n%i)
{
continue;
}
else
{
r=i;
}
}
y=r*(m/r)*(n/r)*r;
printf("max %d\n",r);
printf("min %d\n",y);
return 0;
}
2、数学求解最大公约数与最小公倍数的方法—辗转相除法
2.1原理
假设求m,n中最大公约数,用m除以n,把它的余数和被除数中最大的赋值给m,小的赋值给n,继续相除,直到最后的余数为零位置,这个时候在除数位置上的数就是最大公约数。
如:求(319,377):
第一步: 377÷319=1(余58)
第二步:319÷58=5(余29)
第三步:58÷29=2(余0)
29就是m和n 的最大公约数。
2.2编程步骤
先记录下m,n的乘积,因为求最小公倍数时,需要用到公式:两个数的乘积等于这两个数的最大公约数与最小公倍数的积。
p=n*m;
然后用辗转相除法求出最大公约数。
if(n<m)
{
temp=n;
n=m;
m=temp;
}
p=n*m;
while(m!=0)
{
r=n%m;
n=m;
m=r;
if(n<m)
{
temp=n;
n=m;
m=temp;
}
}
然后代入公式,求出最小公倍数
p/n
2.3 完整代码
#include<stdio.h>
int main()
{
int p,r,n,m,temp;
printf("请输入两个正整数:n,m:");
scanf("%d%d",&n,&m);
if(n<m)
{
temp=n;
n=m;
m=temp;
}
p=n*m;
while(m!=0)
{
r=n%m;
n=m;
m=r;
if(n<m)
{
temp=n;
n=m;
m=temp;
}
}
printf("它们的最大公约数为:%d\n",n);
printf("他们的最小公倍数为:%d\n",p/n);
return 0;
}