我正在研究一个程序,该程序从用户获取输入以获得上限,然后使用一种方法计算从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.关于如何提高效率的任何想法,或者我只是偏执狂?帮助赞赏。
答案 0 :(得分:0)
我会研究是否有一种不同的方法来计算一个数字,你的实现就是在彼此之间嵌套3个循环。 how to factor a number java可能有帮助
答案 1 :(得分:0)