问题是: 可以被1到20的所有数字整除的最小正数是多少?
我编写了以下程序,它提供了正确的输出,但执行时间很长。
我可以做些什么来加强我的计划?
public class ep5 {
public static void main(String[] args) {
int n=100,k=0;
boolean check=true;
while(check)
{
k=0;
n++;
for (int i=2;i<21;i++)
if(n%i!=0)
k=1;
if (k!=1)
check=false;
}
System.out.println(n);
}
}
答案 0 :(得分:1)
一个开始不是除以2的倍数。
for (int i=3;i<21;i++){ //begin at i = 3
i = i + 1; //count by twos
if(n%2 !=0 && n%i!=0) //add a condition
k=1;
}
我想你可以将这个逻辑扩展到3,5,7,11,13,17和19的倍数,所有素数都在1到21之间。摆脱for循环并使用else if语句来加快这个过程。
if (n%2 !=0)
k = 1;
else if (n%3 != 0)
k = 1;
else if (n%5 != 0)
k = 1;
else if (n%7 != 0)
k = 1;
else if (n%11 != 0)
k = 1;
else if (n%13 != 0)
k = 1;
else if (n%17 != 0)
k = 1;
else if (n%19 != 0)
k = 1;
else
check = false;
希望有所帮助。
答案 1 :(得分:-1)
可以很容易地看出,将所有数字从1分为20的最小数字是所有数字(最大功率(小于20的素数)小于20)的乘积,您可以设法找到这些数字并在那里计算更大的功率小于20并乘以这些数字
我在数学上做的是在素数乘积上分解所有这些数字,并为每个素数取最大的幂。