0
package primesieve1;

import java.io.InputStreamReader;
import java.util.Scanner;

public class Primesieve1 {

    public boolean[] sieveOfEratosthenes(int max){

    boolean[] primeno; //defaults to false
        primeno = new boolean[max];
    for(int i=2; i<max; i++ ){primeno[i]=true;}

    for(int i=2; i<Math.sqrt(max);i++){
        if(primeno[i] == true){
            //all multiples of i*i, except i, are not primeno
            for(int j = i + i; j<max; j=j+i){
                primeno[j]=false;
            }
        }

    }
    return primeno;
}

    public void printTrue(boolean[] arr){
    for(int i=0; i<arr.length; i++){
        if(arr[i]==true){
            System.out.print(i + ", ");
        }
    }
    }

    public static void main(String[] args) {

        System.out.println("enter limit");
        Scanner sc = new Scanner(new InputStreamReader(System.in));
     int a = sc.nextInt();
        boolean a1[];
        Primesieve1 obj = new Primesieve1();
        a1 = obj.sieveOfEratosthenes(a);

        obj.printTrue(a1);

    }
}

给出这个错误不明白为什么 java.lang.OutOfMemoryError: Java heap space

4

1 回答 1

0

虽然我不是 100% 确定我认为 boolean[] 每个条目仍然使用大约 1 个字节。Max 可能会变得相当大,因此即使增加 JVM 的内存也可能无法解决问题。但是,您可以做的一件事是不使用 boolean[] 而是使用 a BitSet,这样您每个数字只会使用 1 位,因此您可能可以覆盖到 int 的最大值。

于 2013-10-09T05:36:17.943 回答