我正在尝试创建一个Sieve of Eratosthenes算法的Java实现。为什么我的算法没有给出预期的输出?
我有下面的代码,它运行,虽然给出了一个不正确的输出。
import java.util.ArrayList;
public class sieveOfEratosthenes {
private static final ArrayList<Integer> test = new ArrayList<>();
public static void main (String [] args) {
java.util.Scanner tempInput = new java.util.Scanner(System.in);
System.out.println("What number would you like the prime numbers to be generated to?");
int maxPrime = tempInput.nextInt();
for(int i = 2; i <= maxPrime; i++) {
test.add(i);
}
getPrimeList(maxPrime);
}
private static void getPrimeList(int maxNumber) {
int sqrtOfNum = (int) Math.sqrt(maxNumber);
int temp = 0, i = 0;
int currentPrime = test.get(i);
boolean completed = false;
i++;
//do {
while((completed == false) && (i < test.size())) {
if(i >= test.size()) {
completed = true;
} else if((temp <= sqrtOfNum)) {
removeMultiples(currentPrime);
}
i++;
if (i < test.size()) {
currentPrime = test.get(i);
}
}
//}while(completed == false && (i < test.size()));
System.out.println("Prime numbers upto: " + maxNumber + ": " + test);
}
private static void removeMultiples(int primeToTest) {
ArrayList<Integer> temp = new ArrayList<>();
for (Integer toTest : test) {
if (!(((toTest) % primeToTest) == 0)) {
temp.add(toTest);
}
}
test.clear();
test.addAll(temp);
}
}
由程序给出的输出的一个例子是如下:
What number would you like the prime numbers to be generated to?
10
Prime numbers upto: 10: [3, 5, 9]
显然,输出用于上述的例子应该是:
Prime numbers upto: 10: [2, 3, 5, 7]
尝试,因为它是在链路作出任何聪明的优化其实之前描述的实现算法。我没有看到你“标记”非素数,而是清除列表。只需首先在维基页面概览中实施四个步骤。这样调试会更容易。 – dpmcmlxxvi