当前位置: 首页 > 知识库问答 >
问题:

运行程序需要很长时间[已关闭]

萧允晨
2023-03-14

询问代码的问题必须证明对所解决问题的理解程度最低。包括尝试的解决方案、为什么不起作用以及预期的结果。另请参见:堆栈溢出问题检查表

public class Problem_3 {
    public static void main(String... args) {
        long limit = 600851475143L;
        long largestPrimeFactor = 0;

        for (long number = 2; number < limit; number++) {
            if (isPrime(number)) {
                if ((limit % number == 0)){
                    largestPrimeFactor = number; 
                }
            }
        }       
        System.out.println(largestPrimeFactor);
    }

    public static boolean isPrime(long number) {
        for (int i = 2; i < number; i++) {
            if (number % i == 0) {
                return false; 
            }
        }
        return true; 
    }
}

我敢肯定,上面的程序不是无限循环的。我用limited=13195;进行了测试,得到了想要的结果29

我不明白为什么我的CPU要花很长时间来运行它。

编辑:ProjectEuler的我的代码。网络问题3。

共有3个答案

公西博实
2023-03-14

这就是原因。

long limit = 600851475143L;

一个O(n^2)算法,n是这个长数字

柏修洁
2023-03-14

代码的时间复杂度为O(N^2)。所以对于大数来说,这不是一个好的算法。一个可能的建议如下——

你对最大的素数感兴趣,那么为什么不从最大的值开始呢?

    for (long number = limit-1; number > 1; number--) {
        if (isPrime(number)) {
            if ((limit % number == 0)){
                largestPrimeFactor = number;
                 break; 
            }
        }
    }  

虽然时间复杂度保持不变,但这肯定会比当前的算法减少时间。

但是,什么是时间复杂度...??你是如何计算的...??什么是O(N^2)??请解释

 for (long number = 2; number < limit; number++)

以上是您的第一个for循环,您将在其中进行n次迭代。在这个函数中,您调用了isPrime()函数,该函数中又有一个for循环(int i=2;i

傅长恨
2023-03-14

您的算法的时间复杂度为O(n^2),因此对于较大的极限值,它不是非常有效。

所以它很慢,因为你使用的算法很差。

 类似资料:
  • 我知道要冬眠。我有一个sql语句 我尝试用createCriteria和HQL实现它。 HQL: 问题是,此HQL的执行时间延长了10倍。并执行许多不必要的查询。我尝试使用注释字符串进行转换,它有了一些改进,但仍然比createCriteria查询长5倍,此外,我无法进行此转换 <代码>列表 版本数据防御

  • 我使用javamail通过IMAP协议从exchage帐户读取邮件。这些邮件是纯格式的,内容是XML。 几乎所有这些邮件的大小都很短(通常小于100Kb)。然而,有时我不得不处理大型邮件(大约10Mb-15Mb)。例如,昨天我收到一封13Mb大小的电子邮件。仅仅读它就花了50多分钟。这正常吗?有没有办法提高它的性能?代码是: 花费如此长时间的方法是。我做错了什么?有什么提示吗? 非常感谢,我的英语

  • 没有一个参数帮助我们在较短的时间内解决查询。

  • 我有一个Java ExecutorService(固定线程池1),我将可运行的任务传递给它以供将来执行。每个任务通常在10秒内完成。Executor服务只是简单地完成任务。如果我关闭应用程序,我会运行以下程序:; 问题是它似乎需要一段时间才能关闭,有时可能需要几分钟,有时它似乎永远不会关闭,有时它会在几秒钟内关闭!在执行器队列中的任何时候都可能有大约2000个任务,但我只是希望它完成当前正在执行的

  • 给出结果需要20多秒,而在mongo控制台中同样的查询需要不到一秒。 为什么会出现这种情况,如何减少速度差距?

  • 我有以下PHP代码在Laravel正在执行一个MySql查询: 执行此查询需要很长时间。 我对所排序的列以及其他查询的许多列都有索引。 我该怎么办? 更新: 执行的查询: 结果: