java - 关于埃拉托斯特尼筛法

标签 java sieve-of-eratosthenes sieve

我在使用埃拉托斯特尼筛时遇到了一些麻烦。 所以我从一本叫做“Schaum's Outline”的书中得到了筛子的数学计算,但我认为这本书的编程代码是错误的...... 这是书中的代码:

public class Sieve
{
    final static int P = 800;
    static boolean[] isPrime = new boolean[count];

Sieve();
{
    for (int i = 2; i<P; i++)
    {
        isPrime[i] = true;
    }
    for (int i = 2; i<P/2; i++)
    {
        if (isPrime[i])
        {
            for (int j = 2*i; j<P; j += i)
            {
                isPrime[j] = false;
            }
        }   
    }
}
public static void main(String[] args)
{
    new Sieve();
    print();
}

static void print()  {
    for (int i=0; i<count; i++)
        if (isPrime[i]) System.out.println(i + " ");
        else if (i%90==0) System.out.println();
        System.out.println();
}}

所以,是的,由于“Sieve()”无法识别,我使用了代码并做了一些细微的更改。 下面是我的代码:

public class Primenumbers
{
    final static int count = 1000;
    static boolean[] isPrime = new boolean[count];

    public static sieve(int count, boolean isPrime);
    {
        for (int i = 2; i<count; i++)
        {
            isPrime[i] = true;
        }
        for (int i = 2; i<count/2; i++)
        {
            if (isPrime[i])
            {
                for (int j = 2*i; j<count; j += i)
                {
                    isPrime[j] = false;
                }
            }   
        }
    }
    public static void main(String[] args)
    {
        for (int i=0; i<count; i++)
        {
            if (isPrime[i])
            {
                System.out.println(i + " ");
            }
        }
    }
}

那么...我做错了什么? 感谢您的帮助!

最佳答案

what am i doing wrong?

您已经定义了 sieve() 但您从未调用它。打印之前需要调用它:

public static void main(String[] args)
{
    sieve(); // <<== Here
    for (int i=0; i<count; i++)
    {
        if (isPrime[i])
        {
            System.out.println(i + " ");
        }
    }
}

它在书中起作用的原因是初始化已在构造函数中完成。您修改后的代码将初始化移至静态函数中,但无法调用该初始化。

您还需要从 sieve 的声明中删除参数,因为它已经可以访问 isPrimecount

另一种方法是完全删除 sieve 方法,用静态初始化器替换它。而不是

public static sieve() 
{
    // Code to initialize isPrime
}

static
{
    // Code to initialize isPrime
}

此更改使 sieve() 方法成为静态初始化程序,该方法始终在类中的其他任何内容执行之前调用。

关于java - 关于埃拉托斯特尼筛法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19315707/

相关文章:

java - 如何将jpeg图像转换为jpeg2000无损压缩图像?

java - 如何使用 Java 读取 PDF 文件?

java - 有些帮助找出我的埃拉托斯特尼筛出了什么问题

javascript - 具有启动逻辑的延迟筛选算法

c++ - C++ 中埃拉托色尼筛法的问题

Java:如何通过 ArrayList 中的新行读取它们并将其存储在数组中?

java - Android FTP 更改目录失败

python - 我是否已经制定了新的主要发现算法,并且有更快的算法吗? (Python)

arrays - 埃拉托色尼筛法

haskell - 筛子一开始就卡住了