题目:2520是最小的能够被1到10整除的数。最小的能够被1到20整除的正数是多少?
方法1:遍历1~20 找出每个数的因数且从中去除之前记录下的因数(类似于素数筛,暂时先留着)
方法2:暴力解法:求a1,a2,…,an的最小共倍数,先求(a1,a2)的最小公倍数a12,再求(a12,a3)的最小公倍数a123,依次递推下去注意数据的溢出
代码如下:定义了一个中间最小公倍数
#include <stdio.h>
int gcd (int a, int b) {
return (b ? gcd(b, a % b) : a);
}
int lcm (int a, int b) {
return a * b / gcd(a,b);
}
int mul_lcm(int n)
{
int i ,lcm_num = 1; //令缓冲最小公倍数lcm_num = 1
for(i = 1;i <= n; i++){
if(n == 1) return 0;
lcm_num = lcm(lcm_num,i);
}
return lcm_num;
}
int main (){
int a;
while(~scanf("%d",&a)){
printf("The least common multiple is %d\r\n",mul_lcm(a));
}
return 0;
}
方法三:短除法

我的尝试:

但我感觉实现起来没有暴力解快:先留着
该博客探讨了如何找到能被1到20整除的最小正数。作者提供了三种方法:遍历因数、暴力求解和短除法。通过C语言代码展示了暴力求解法,利用最小公倍数(LCM)的计算来解决问题,最终得出最小公倍数的算法。
1106

被折叠的 条评论
为什么被折叠?



