我该如何完成有关依兰亭烯筛分的代码?

时间:2019-02-14 19:37:46

标签: java arrays for-loop if-statement sieve-of-eratosthenes

这是关于使用这种方法找到2到1000之间的质数,但我找不到解决方案,并且我一直在思考并尝试解决此问题三天。我迫切需要帮助,所以如果有人可以帮助我,我将非常感激

我尝试了另一个for循环和if语句,因为我的老师说我只需要另一个循环或仅一个代码行,但是我似乎无法找到解决方案。我真的很不好过,所以如果我的代码看起来很糟糕,我很抱歉

public class Practica {

  public static void main(String []   
    byte []marcado = new byte [1000];
    for (int i = 2; i < 1000; i++);
    if (marcado[i] == 1) {
      for (int j = 2; i*j < 1000; j++) {
       marcado [i*j] = 0;
      }
    }

我希望打印出所有素数

1 个答案:

答案 0 :(得分:1)

试一试:

public static void main(String[] args) {
        byte[] marcado = new byte[1000];
        for (int i = 2; i*i < 1000; i++) {
            if (marcado[i] == 0) {
                for (int j = 2; i * j < 1000; j++) {
                    marcado[i * j] = 1;
                }
            }
        }

        // print the numbers:
        for (int i = 1; i < 1000; i++) {
            if(0 == marcado[i]){
               System.out.print(" " + i);
            }
        }
    }

除了消除语法错误外,我颠倒了逻辑,以使marcado [i] == 0表示质数,否则表示无质数。

基于您的方法的另一种可能性是将所有数组元素都初始化为“ 1”(例如,填充);