目录
何为最小公倍数
题目要求
代码实现
方法一:暴力求解法(不推荐)
方法二:递乘试摸法(推荐)
何为最小公倍数
最小公倍数是指两个或者多个正整数(除了0以外)的最小的公共倍数
题目要求
输入两个正整数; 如:输入:5 7
输入最小公倍数; 如:输出:35
代码实现
方法一:暴力求解法(不推荐)
#include<stdio.h>
int main()
{//输入int a = 0;int b = 0;scanf("%d %d", &a, &b);//计算最小公倍数int m = a > b ? a : b;while (1){if (m % a == 0 && m % b == 0)break;elsem++;}//输出printf("m = %d", m);return 0;
}
代码解析:
解析:int m = a > b ? a : b;
求出 变量a、b 的较大值,存储到 变量m ,并将 变量m 假设为 变量a、b 的最小公倍数
解析:while循环
如果 变量m 取模 变量a、b 的结果同时为 0 时,那么此时的 变量m 就是 变量a、b 的最小公倍数
如果取模结果不为 0 时,那么 变量m 就自增1,直到能同时取模为 0 为止
代码验证:
代码缺点:
当输入的两个正整数接近了整型能表示的最大范围时,那么这两个正整数的最小公倍数一定会超出整型能表示的最大范围
方法二:递乘试摸法(推荐)
#include<stdio.h>
int main()
{//输入int a = 0;int b = 0;scanf("%d %d", &a, &b);//计算最小公倍数int i = 1;while ((a * i) % b)i++;//输出printf("%d\n", i * a);return 0;
}
代码解析:
解析:int i = 1;
解析:while ((a * i) % b)
举例说明:
35 / 5 = 7
35 / 7 = 5
创建一个 整型变量i ,用来递乘 变量a 或者 变量b
当 变量a 乘以 整型变量i 后,再取模 变量b,如果结果为 0 ,那就说明 a*i 就是 变量a、b的最小公倍数(变量b同样如此)
如果结果不为 0 时,递增 变量i,直到取模结果为0
代码验证: