Java Prime数字从1到N变慢,提高效率?

时间:2018-03-02 19:00:29

标签: java performance primes

我正在研究一个程序,该程序从用户获取输入以获得上限,然后使用一种方法计算从1到N的所有素数。我有一个可行的解决方案,但是我的头一直在烦我这是非常低效的。

 public ArrayList<Integer> primeNumbers()
{
    long startTime = System.nanoTime();
    ArrayList<Integer> prime = new ArrayList<Integer>();
    ArrayList<Integer> factorList;
    for (int i = 2; i <= this.limit; i+=1)
    {
        factorList = factors(i);
        if (factorList.size() == 2 && factorList.contains(1) && factorList.contains(i))
        {
            prime.add(i);
        }
    }
    long endTime = System.nanoTime();
    long totalTime = endTime - startTime;
    System.out.println("The total time was: " + totalTime);
    return prime;

}

public ArrayList<Integer> factors(int i)
{
    ArrayList<Integer> factor = new ArrayList<Integer>();

    for (int a = 1; a <= i; a+=1)
    {
        for (int b = 1; b<=i; b+=1)
        {
            if (a*b == i)
            {
                if (factor.contains(a) == false)
                     factor.add(a);
                if (factor.contains(b) == false)
                     factor.add(b);
            }
        }
    }
    return factor;
}

虽然上面的代码有效,但

似乎进展缓慢
this.limit

值高于3500.关于如何提高效率的任何想法,或者我只是偏执狂?帮助赞赏。

2 个答案:

答案 0 :(得分:0)

我会研究是否有一种不同的方法来计算一个数字,你的实现就是在彼此之间嵌套3个循环。 how to factor a number java可能有帮助

答案 1 :(得分:0)

以下是Eratosthenes Sieve的Java实现:

for, for..in, while, do..while

我在my blog讨论此功能。