我们被分配了一个与eratosthenes算法的筛子并行的Java程序。我已经以每种了解的方式尝试过几次,但无法正确处理。我应该使用填充阵列的质数小于所估算的数字。这是我拥有的代码,有人可以帮助我仔细检查程序和/或弄清楚为什么我会遇到此错误?任何帮助都将受到赞赏。
import java.text.DecimalFormat;
import java.util.Scanner;
import java.util.Arrays;
public class Lab6st
{
static int MAX = 100;
static int i;
static int k;
static int intArray;
static int isPrime;
public static void main(String args[])
{
System.out.println("nLAB12 100 Point Version");
Scanner input = new Scanner(System.in);
boolean primes[] = new boolean[MAX];
computePrimes(primes);
displayPrimes(primes);
Arrays.fill(primes,true);
}
public static void computePrimes(boolean primes[])
{
System.out.println("nCOMPUTING PRIME NUMBERS");
for (int i = 1; i < MAX; i++);
{
for (i=1; i < MAX; i++ );
for (k=2; k<i; k++){
int n = i%k;
if (n==0)
{
break;
}
}
if (i==k);
{
primes[i] = true;
}
}
}
public static void displayPrimes(boolean primes[])
{
System.out.println("nnPRIMES BETWEEN 1 AND "+ primes.length);
for (int isPrime = 0; isPrime < MAX; isPrime++);
if (primes[isPrime] == true);
System.out.println(Arrays.asList(primes));
}
}
您的算法是不是 eratosthenes的筛子;这是审判部门的糟糕实施(Modulo操作员将其放弃)。我的文章用质数编程 详细描述了eratosthenes算法的筛子,讨论了您犯的非常常见的错误,并在Java中包括此实现:
public static LinkedList sieve(int n)
{
BitSet b = new BitSet(n);
LinkedList ps = new LinkedList();
b.set(0,n);
for (int p=2; p<n; p++)
{
if (b.get(p))
{
ps.add(p);
for (int i=p+p; i<n; i+=p)
{
b.clear(i);
}
}
}
return ps;
}