2520是最小的能够被1到10整除的数。
最小的能够被1到20整除的正数是多少?
这个题相当于是求1-20的最小公倍数,我们可以首先考虑如何求解三个数的最小公倍数。比如4,5,6的最小公倍数我们首先求4,5的最小公倍数即为20,我们再求解20和6的最小公倍数,由于最小公倍数=两数相乘/两数最大公因数。则20和6的最小公倍数为20*6/2=60
则此题相当于求解20个数的最小公倍数,那么使用一个循环两两求解即可得出结果
代码如下:
public static int Gys(int a,int b)//求两个数的最大公因数
{
int min=a>b?b:a;
for(int i=min;i>1;i--)
{
if(a%i==0&&b%i==0)
{
return i;
}
}
return 1;
}
public static int Get(int num)//求1~num的最小公倍数
{
int res=num*(num-1)/Gys(num,num-1);//res用来存储数字的最小公倍数 。此时为num和num-1的最小公倍数。
for(int i =num-2;i>=1;i--)
{
int gys=Gys(res,i);
res=(res*i)/gys;
//注意代码这里由于res*i乘完后若数字过大则很可能会产生溢出,可以在定义时便使用long或者里直接写成res=res/gys*i。
}
return res;
}