欧几里得算法又称辗转相除法,是指用于计算两个a,b的最大公约数。有数学和计算机两个方面。计算公式:gcd(a,b) = gcd(b,a mod b)。
两个整数的最大公约数是能够同时整除它们的最大的正整数。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数相除余数的最大公约数。
实现步骤:
-
选择一个较大的数作为基准数,记作A。
-
将较小的数B与基准数A相除,得到余数R1。
-
以余数B作为基准数,再次将A与得到的余数相除,得到新的余数R2。
-
重复步骤2和3,直到余数为零。此时,余数为零的数就是两个数之间的最大公约数。
辗转相除法是一种递归算法,其基本思想是通过不断地缩小基数,最终找到两个数的最小公倍数。这种方法不仅适用于自然数,还可以扩展到高斯整数和其他类型的数据。此外,辗转相除法也被应用于丢番图方程和连分数的计算中。
最小公倍数的算法:
-
公式法:由于两个数的乘积等于这两个数的最大公约数与最小公倍数的积。即(a,b)×[a,b]=a×b。
#include <stdio.h>
int gcd(int a, int b) // 递归实现
{
if (a % b == 0)
{
return b;
}
else
{
return gcd(b, a % b);
}
}
int bin_gcd(int a, int b) // 迭代实现
{
int tmp;
if (a % b == 0)
{
return 0;
}
else
{
while (a % b != 0)
{
tmp = a;
a = b;
b = tmp % b;
}
return b;
}
}
int main()
{
int a;
int b;
printf("请输入两个整数:");
scanf("%d%d", &a, &b);
printf("它们的最大公约数是:%d\n", gcd(a, b));
printf("它们的最小公倍数是:%d\n", a * b / gcd(a, b));
return 0;
}