首页 > 解决方案 > 如何完成关于 Erathostenes 筛子的代码?

问题描述

这是关于使用这种方法找到从 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;
      }
    }

我希望打印所有质数

标签: javaarraysfor-loopif-statementsieve-of-eratosthenes

解决方案


试一试:

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”初始化所有数组元素(例如,使用填充);


推荐阅读