【问题标题】:How can I complete my code about the Sieve of Erathostenes?如何完成关于 Eratosthenes 筛的代码?
【发布时间】:2019-02-14 19:37:45
【问题描述】:

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

我希望打印所有素数

【问题讨论】:

  • JavaScript 与 Java 无关,它是一种完全独立的语言。至于你的代码,你能描述一下它到底应该做什么吗?
  • 我会退后一步,重新审视你迄今为止在课堂上学到的所有东西。您的代码中有多个问题。例如:你的第一个 for 循环,你有一个尾随 ;在那条线上。这意味着 for 循环有一个 EMPTY 主体。这意味着您的代码 ... 实际上甚至不应该编译,因为在该行之后没有定义 i 。将您的 for 循环体也放入 { 大括号 } 中。除此之外,您当前的代码只是将 0 分配到一个数组中,该数组的每个插槽中都有 0。
  • 好的,那里有很多编译错误。一个一个地处理它们,试图让代码看起来像你以前见过的东西。特别要注意在不应该有分号的地方出现杂散分号。此外,在marcado[i] 结果为 1 的情况下,您将需要一行代码来实际打印质数。您还没有提供它。最后,我建议您以不同的方式使用 0 和 1,因为数组最初将充满零,而不是一。
  • 要解决你真正的问题:首先研究 E 的筛子是如何工作的。有许多教程和网站解释了它是什么以及它是如何工作的。从那里,只需自己计算几个数字的算法。然后尝试将您的知识转化为代码。

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


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

【讨论】:

  • 非常感谢。你帮了我很多
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-19
  • 1970-01-01
相关资源
最近更新 更多