代码之家  ›  专栏  ›  技术社区  ›  Euclidean

使用布尔函数在Java中实现素筛

  •  0
  • Euclidean  · 技术社区  · 7 年前

    我试图在Java中实现一个素数筛,这样我就可以计算出所有小于某个最大值的素数之和。我试着用一个方法primeseve和一个布尔数组来实现它,如果这个数是复合的,我通过取一个素数并考虑所有小于最大值的整数倍来实现。

    线程“main”java.lang中出现异常。错误:未解决的编译问题: 语法错误,插入“.class”以完成表达式 表达式的类型必须是数组类型,但已解析为类
    在问题3.primeseve(问题3.java:11)
    问题3.main(问题3.java:26)

    public class Problem3 {
    
        public static boolean[] PrimeSieve(int max) {
    
            // automatically all entries are false
            boolean[] isPrime = new boolean[max];
    
            // when a number isn't prime make the entry true
    
            for (int i = 0; i < max; i++) {
                if (!boolean[i]) {
                    for (int j = 2i; j < max; j += i) {
                        boolean[j] = true;
                    }
                } else {}
            }
    
            // return the isPrime boolean with all the primes as false
            return isPrime;
        }
    
        public static void main(String[] args) {
    
            boolean[] Primes = new boolean[100];
            Primes = PrimeSieve(100);
    
            int i = 0;
            int ans = 0;
    
            while (i < 100) {
                if (!Primes[i]) {
                    ans += i;
                    i++;
                } else { 
                    i++; 
                }
            }
    
            System.out.println(ans);
        }
    }
    

    1 回复  |  直到 7 年前
        1
  •  1
  •   Ran Eldan    7 年前

    你有两个问题:
    1) 您使用 类型 大堆 .
    所以 boolean[i] isPrime[i] .
    2) Java不懂 2i 作为“两次我”。你需要写下来 2*i .

    这将使您的代码编译:

     for (int i = 0; i < max; i++) {
                        if (!isPrime[i]) {
                            for (int j = 2*i; j < max; j += i) {
                                isPrime[j] = true;
                            }
                        } else {}  // By the way - This is really not necessary
                    }