项目Euler Program 5在Java中花费了太多时间

时间:2014-07-19 17:23:08

标签: java

问题是: 可以被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);
}
}

2 个答案:

答案 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并乘以这些数字

我在数学上做的是在素数乘积上分解所有这些数字,并为每个素数取最大的幂。

相关问题