方法1:辗转相除法
(也称为欧几里德算法)是一种用于计算两个整数的最大公约数的方法。
推荐使用
它基于以下原理:
假设有两个整数a和b,其中a > b。我们可以将a表示为b的倍数加上余数,即a = bq + r,其中q是a除以b的商,r是余数。
如果r等于0,那么b即为a和b的最大公约数。这是因为如果r等于0,那么a能够被b整除,因此b是a的约数,同时b也是自身的约数,所以b是最大公约数。
如果r不等于0,我们就将a替换为b,将b替换为r,并再次执行相同的步骤。通过反复执行这个过程,最后会得到一个余数为0的步骤,这时候的b即为原始两个整数的最大公约数。
(1)辗转相除法
设有两整数a和b:
① a%b得余数c
② 若c==0,则b即为两数的最大公约数
③ 若c!=0,则a=b,b=c,再回去执行①。
例如求27和15的最大公约数过程为:
27÷15 余12
15÷12 余3
12÷3 余0
因此,3即为最大公约数。
int main()
{
int m,n,max,min,b,c;
printf("请输入两个整数:\n");
scanf("%d%d",&m,&n);
c=m%n;
b=m*n;
while(c != 0)
{
m=n;
n=c;
c=m%n;
}
printf("%d",n)
return 0;
}
如上述代码
n为最小公约数
方法2:相减法
假设有两个整数a和b,其中a > b。我们可以重复执行以下步骤:
1. 如果a大于b,则将a减去b,即a = a - b。
2. 如果b大于a,则将b减去a,即b = b - a。
3. 如果a等于b,则a(或b)即是原始两个整数的最大公约数。
4. 如果a不等于b,则回到第1步。
通过反复执行这个过程,最终会得到一个a等于b的步骤,这时候的a(或b)即为原始两个整数的最大公约数。
请注意,相减法可能会产生较大的中间计算值,因此在实际应用中,辗转相除法通常更常用,因为它的计算过程更简单和高效。
例如,我们可以使用相减法来计算36和24的最大公约数:
1. 36 - 24 = 12
2. 24 - 12 = 12
3. 此时a等于b,所以最大公约数为12。
相减法在一些特定情况下可能会比较高效,但在一般情况下,辗转相除法通常更加常用和有效。
int main()
{
int m=0, n=0;
scanf("%d%d",&m,&n);
while (m != n)
{
if (m > n)
m = m - n;
else
n = n - m;
}
printf("%d\n", n);
return 0;
}
求最小公倍数·
最小公倍数=两整数的乘积÷最大公约数
#include<stdio.h>
int main()
{
int m = 0, n = 0;
int max = 0;
scanf("%d%d", &m, &n);
max = m * n;
int min = 0;
while (m != n)
{
if (m > n)
m = m - n;
else
n = n - m;
}
printf("%d\n", n);
min = max / n;
printf("%d\n", max);
return 0;
}
#include <stdio.h>
int main()
{
int m = 0;
int n = 0;
int c = 0;
int b ,min;
scanf("%d%d",&m,&n);
b = m*n;
c = m % n ;
while(c !=0)
{
m = n;
n = c;
c = m % n;
}
printf("%d\n",n);
min =b/n;
printf("%d\n",min);
return 0 ;
}