加快我对项目euler第三次挑战的实施

时间:2014-03-13 20:03:23

标签: java

我已经从96行变为17行,在这一行中点击,这是我在完成所有努力后留下的:

public class IntegerFactoriseFive {

    public static void main(String[] args)
    {
        long n = 600851475143L;
        for (long i = 2; i <= n; i++)
        {
            if (n % i==0)
            {
                System.out.println(i);
                n = n / i;
                i = 2;
            }
        }
    }

}

有没有办法让它更快?我并没有暗示它已经不够快,而是为了它和改善我未来解决问题的方式。我的其他解决方案是永远的,我使用递归,我甚至只迭代到我正在检查的数字的平方根(从早期的学校数学我知道只检查平方根,它更快),但它仍然要慢,最后迭代一个并将这个巨大的数字分开是错误的方式来解决它,所以相反我认为尽可能地划分数字是我能做任何好事的唯一方法时间。建议请,正如你可以从班级名称看到的那样,这是我的第五个官方解决方案,这是我提出的最快的解决方案。

2 个答案:

答案 0 :(得分:1)

删除i = 2;子句中的if(并使其成为while循环)。重新启动循环将不再发现任何情况。也就是说,

while (n % i == 0)
{
  System.out.println(i);
  n = n / i;
  // i = 2; /* Ouch */
}

答案 1 :(得分:0)

你可以通过使用多线程来加快速度,例如你可以使用两个线程,一个从头开始直到一半,另一个从结束开始直到一半。 因此,你快速x2和速度取决于线程数。