求最大公约数和最小公倍数是C语言算法中最基本的案例。一下列出三种方法来帮助你学习:
a) 第一种方法:
#include<stdio.h>
int main()
{
int a, b,m, n;
printf("输入两个整数:");
scanf_s("%d,%d", &a, &b);
if (a < b)
{
int temp = a;
a = b;
b = temp;
}
m = a * b;
n = a % b;
while(1)
{
if (n == 0)
break;
a = b;
b = n;
n = a % b;
}
printf("最大公约数为:%d",b);
printf("\n最小公倍数为:%d", m/b);
return 0;
}
结果:
b) 第二种方法:
还有一种很老套的方法,既然要求最大公因数,就运用for循环语句,从较小的那个数开始,观察其是否能被较大的数以及较小的数整除,如果能,该数即为两数间的最大公因数。
代码如下:
#include<stdio.h>
int main()
{
int a, b,m=1, n=1;
int i;
printf("输入两个整数:");
scanf_s("%d,%d", &a, &b);
if (a < b)
{
int temp = a;
a = b;
b = temp;
}
for (int i = b; i >=1; i--)
{
if (a % i == 0 && b % i == 0)
{
n = i;
break;
}
}
m = n * (a / n) * (b / n);
printf("最大公约数为:%d",n);
printf("\n最小公倍数为:%d", m);
return 0;
}
结果:
c) 第三种方法:
跟第二种方法类似,不过是通过从2开始,依次寻找最大公因数,方法过程大致如下所示:
#include<stdio.h>
int main()
{
int a, b,m=1, n=1;
int i=2; //令公因数从2开始
printf("输入两个整数:");
scanf_s("%d,%d", &a, &b);
if (a < b) //将较大值赋为a,较小值赋为b
{
int temp = a;
a = b;
b = temp;
}
for (; i <= b; i++)
{
if (a % i == 0 && b % i == 0)
{
n *= i;
a /= i;
b /= i;
i = 2;
}
}
printf("最大公约数为:%d",n);
printf("\n最小公倍数为:%d", n*a*b);
return 0;
}
结果:
当然啦,以上三种小方法,之所以把第一种方法放在第一位是因为该方法所需的时间复杂度较小,而第二、第三种方法的时间复杂度更大。如果有大佬还有更好的方法,还请多多指教!