-5
     public int getPrimesWithin(int min, int max)
{
    for (int n = min; n <= max; n++)
    {
        if (nums [n] == true)
        {
            return n;
        }

    }

}

遍历代码并返回素数是正确的,接下来我应该做什么来返回两个数字之间的素数

4

3 回答 3

2

最简单的算法需要知道所有素数(如果恰好是这种情况,包括在内)sqrt(max)

  • 获取/构建 2 和 之间的素数列表sqrt(max)
  • 迭代和n之间的所有数字minmax
  • 迭代素数列表,测试它们是否相除n
  • 如果其中任何一个是,则n不是素数,并且可以终止内部迭代。
  • 如果它们都不是除数,n则为素数。
于 2013-08-29T22:20:59.433 回答
0

这将永远是真的:

if (nums [n] = true)

我想你想要这个:

if (nums [n] == true)
于 2013-08-29T22:10:47.663 回答
0

这段代码:

for(int i = min; i <= max; i++)
{
    int [] temp = new int [i];
}

到它完成时,总是会产生temp一个长度为 int 的数组max。此外,正如斧头指出的那样,一旦我们离开循环,我们就会因为temp不再在范围内而丢失数组。我建议使用ArrayList, 因为那样你就可以有一个可变长度的数组。

这部分:

if (nums [n] = true)

正如其他人指出的那样,设置nums[n]true. 你可能想要==.

这一行:

temp +=n;

没有多大意义。您正在尝试添加一个数组和一个 int。

试试这个:

ArrayList<Integer> temp = new ArrayList<Integer>();

for (int n = min; n <= max; n++)
{
    if (nums[n] == true)
    {
        temp.add(n);
    }
}

不过,这是假设一些事情。

  1. nums是一个布尔数组,表示索引是否为素数。
  2. 您想要返回所有素数的列表,而不是所有素数的总和或素数的计数。
于 2013-08-29T22:15:25.500 回答