目录
题目
正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数(0<=A,B<=10000)
第一种方法
两个数以3和7为例,两个数的最小公倍数一定大于较小的那个数。从3开始判断它是否为两个数的公倍数,3不是的话再加一,看看4是不是,4不是的话再加一,看看5是不是,以此类推,直到找到为止。
因此我们的代码就可以写成:
#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int n = a;
int m = b;
int x = (a < b ? a : b);//找出a和b较小的数
while (x % a != 0 || x % b != 0)
{
x++;
}
printf("%d", x);
return 0;
}
第二种方法(较优)
第一种算法每次只加一,这样的话就需要判断很多次,效率太低,如何优化呢?
还是以3和7为例,是二者的公倍数的数必然也是3的倍数(包含7的倍数)
因此,我们可以每次加较小数的倍数而不是加1,也就是判断3 6 9……这些数是否为3和7的公倍数,这样效率就提升了许多。
#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int n = a;
int m = b;
int x = (a < b ? a : b);
int tmp = x;
while (x % a != 0 || x % b != 0)
{
x+=tmp;
}
printf("%d", x);
return 0;
}
第三种方法(找最大公约数)
思路:先找到a和b的最大公约数k
则最小公倍数=a*b/k
#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int n = a;
int m = b;
int k = (a < b ? a : b);
int j = (a < b ? b : a);
while (j % k != 0)
{
k--;
}
printf("%d",a*b/k );
return 0;
}