java - 加快我的欧拉项目第三次挑战的实现

标签 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;
            }
        }
    }

}

有什么办法可以让它更快吗?我并不是说它还不够快,而是为了改进我将来解决问题的方式。我的其他解决方案花了很长时间,我使用递归,我什至只迭代到我正在检查的数字的平方根(从早期的学校数学我知道只检查到平方根,它要快得多),但它仍然很慢,最后迭代一并除以这个巨大的数字是错误的方法,所以相反,我认为尽可能多地除以数字是我能以任何好的方式做到这一点的唯一方法时间。请提出建议,正如您从类名中看到的那样,这是我的第五个官方解决方案,也是我提出的最快的解决方案。

最佳答案

删除 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/

相关文章:

java - Jersey 2 - 从资源方法返回客户端的响应

java - 如何在运行后保持应用程序窗口处于 Activity 状态?

java - 使用 moshi 反序列化时如何区分 long 和 double 值?

java - 通过 JNI 从 Applet 调用 DLL

java - 使用 JDBC 将 CSV 复制到带有自定义类型数组的 Postgres

Java:使用次要货币符号格式化金额

java - jvmti中如何唯一标识线程

java - HystrixRequestContext.getContextForCurrentThread() 变为 null

java - 调用基本重绘方法?

java - Apache Flink : Map function over values of a KeyedStream, 不丢失键控状态