题目: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;
}
方法三:短除法
我的尝试:
但我感觉实现起来没有暴力解快:先留着