如何在C中为素数筛选算法设置可变长度数组?

时间:2018-09-24 13:10:44

标签: c arrays primes

我对C完全陌生,过去只是真的有过使用Python的经验,所以请原谅我的无知。

我正在尝试在C中实现Eratosthenes的质数筛算法。该算法递归地丢弃给定数字的所有倍数,直到找到您想要知道的最后一个数字。具体来说,该程序将输入 n ,并输出所有小于 n 的素数。

要实现这一目标,我想创建一个长度为 n 的数组,并在该数组上递归循环,丢弃我不再关心的整数(将它们更改为0)。

但是我发现的问题是c不允许使用可变长度的数组。我以为通过做这个技巧,我比这个规则稍微聪明一点:

void Sieve(int n) {
    int prime[n+1];
}

但是可悲的是,即使给函数的变量也不行。

因此,我的问题是:如何在C中启动这样的数组?

1 个答案:

答案 0 :(得分:2)

您可以使用动态内存分配:

int* prime;
prime = malloc(sizeof(int)*n);

然后将其用作常规数组,例如prime[n-1]