我已经从 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;
}
}
}
}
有什么办法可以让它更快吗?我并不是说它还不够快,而是为了改进我将来解决问题的方式。我的其他解决方案花了很长时间,我使用递归,我什至只迭代到我正在检查的数字的平方根(从早期的学校数学我知道只检查到平方根,它要快得多),但它仍然很慢,最后迭代一并除以这个巨大的数字是错误的方法,所以相反,我认为尽可能多地除以数字是我能以任何好的方式做到这一点的唯一方法时间。请提出建议,正如您从类名中看到的那样,这是我的第五个官方解决方案,也是我提出的最快的解决方案。
最佳答案
删除 if
子句中的 i = 2;
(并使其成为 while 循环)。重新启动循环将不会再发现任何情况。也就是说,
while (n % i == 0)
{
System.out.println(i);
n = n / i;
// i = 2; /* Ouch */
}
关于java - 加快我的欧拉项目第三次挑战的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22389667/