用数组输出从0-10000的所有素数

时间:2018-09-05 17:54:05

标签: c# arrays primes

我有一项家庭作业,要在C#中输出0-10000之间的所有素数,但必须在解决方案中使用数组

我的代码是:

public static void Main()
{
    Int32[] numbers = new int[10000];

    for (int i = 3; 1 < 10000; i++)
    {
        numbers[i] = i;
    }

    for (int j = 0; j < 10000; j++)
    {
        if (numbers[j] != 0)
        {
            for (int k = 2; (k * j) < 10000; k++)
            {
                numbers[k * j] = 0;
            }
        }
    }

    for (int y = 0; l < 10000; l++)
    {
        if (numbers[l] != 0)
        {
            Console.WriteLine(numbers[l]);
        }
    }
    Console.ReadLine();
}

我一直收到错误消息:

  

main.cs(17,5):警告CS0162:检测到无法访问的代码       编译成功-1条警告

     

未处理的异常:System.IndexOutOfRangeException:索引超出数组的范围。         在MainClass.Main()中的[0x00012]在<9e6bcdf6e2a44b4eb679270e1ffe39ca>:0中       [错误]致命异常:System.IndexOutOfRangeException:索引       在数组的边界之外。         在<9e6bcdf6e2a44b4eb679270e1ffe39ca>:0`

中的MainClass.Main()[0x00012]

(第17行引用了for (int j = 0; j < 10000; j++)

2 个答案:

答案 0 :(得分:2)

代码中的第一个循环:

for (int i = 3; 1 < 10000; i++)

本质上是一个无限循环,总是为1小于10,000,因此永远不会退出。现在,此循环之后的所有内容均无法访问。

您会收到错误,因为经过10,000次循环后,您仍然会尝试这样做:

numbers[i] = i;

并且i将大于9999,这将导致IndexOutOfRangeException

解决此问题后,您会发现更多问题,但是由于这是家庭作业,您需要尝试自己解决这些问题

答案 1 :(得分:1)

您需要修复for循环,所以最终会像这样:

for (int i = 2; i < 10000; i++)
{
    numbers[i] = i;
}

for (int j = 0; j < 10000; j++)
{
    if (numbers[j] != 0)
    {
        for (int k = 2; (k * j) < 10000; k++)
        {
            numbers[k * j] = 0;
        }
    }
}

for (int l = 0; l < 10000; l++)
{
    if (numbers[l] != 0)
    {
        Console.WriteLine(numbers[l]);
    }
}

否则,由于验证1 < 10000,您的第一个循环将是无限的,而第三个循环将引发错误

更新

在阅读@“ Sani Singh Huttunen”注释后,我将第一个循环更改为以2开头,因此它将该数字视为素数,并且这将从结果列表中删除4,因为那不是素数。

Here是一个可行的例子