java - 欧拉计划 #7 优化

标签 java optimization

我一直在关注一个与欧拉计划问题相关的主题。它们需要大量时间才能完成。 (像 Largest Palindrome 和 10,001st Prime 这样的问题)我希望有一些方法可以优化代码以使其更好。我让它运行了超过 24 分钟,但它没有完成。

public class Seven
{
    public static void main(String[] args)
    {
        //Declare Variables
        int primeCount = 0;
        int numCount = 1;
        int latestPrime = 0;

        while(primeCount <= 10001)
        {
            if(isPrime(numCount))
            {
                primeCount++;
                latestPrime = numCount;
            }
            numCount++;
        }

        System.out.println("The 10,001st prime is: " + latestPrime);
    }

    //This method will determine if a number is prime
    public static boolean isPrime(long num)
    {
        //Check for even number
        if(num % 2 == 0)
            return false;

        //Check for non-prime odd numbers
        for(long i = 3; i <= num; i += 2)
        {
            if(num % i == 0)
                return false;
        }

    //Return that the number is prime
        return true;
}

最佳答案

你做了很多重复,你不需要在 for 循环中遍历整个数字,直到平方根为止。

这会在一秒钟内运行。

 // Check for non-prime odd numbers
      for (long i = 3; i <= Math.sqrt(num) +1; i += 2) {
         if (num % i == 0)
            return false;
      }

如果你想进一步优化,你可以将质数存储在一个数组中,并且只检查这个数是否可​​以被前面的质数整除。

关于java - 欧拉计划 #7 优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32283126/

相关文章:

database - SQLite 插入速度随着索引数量的增加而变慢

java - 如何通过类名调用方法

java - 将 pdf 转换为缩略图并将该数据也保存到 solr 中吗?

java - 在同一个java文件中使用两个类

c++ - float 组的更快 abs-max

user-interface - Mac上的CPLEX Optimization Studio GUI

java - 安卓 4.0 及更高版本 : Copy/paste/cut panel disappears onLongClick Listener on the EditText

java - 如果在构造函数中分配一次,原始变量是否需要是 volatile 的

regex - 如何优化使用正则表达式和for循环编写的python代码?

sql-server - 内联 SQL 与存储过程