我对C完全陌生,过去只是真的有过使用Python的经验,所以请原谅我的无知。
我正在尝试在C中实现Eratosthenes的质数筛算法。该算法递归地丢弃给定数字的所有倍数,直到找到您想要知道的最后一个数字。具体来说,该程序将输入 n ,并输出所有小于 n 的素数。
要实现这一目标,我想创建一个长度为 n 的数组,并在该数组上递归循环,丢弃我不再关心的整数(将它们更改为0)。
但是我发现的问题是c不允许使用可变长度的数组。我以为通过做这个技巧,我比这个规则稍微聪明一点:
void Sieve(int n) {
int prime[n+1];
}
但是可悲的是,即使给函数的变量也不行。
因此,我的问题是:如何在C中启动这样的数组?
答案 0 :(得分:2)
您可以使用动态内存分配:
int* prime;
prime = malloc(sizeof(int)*n);
然后将其用作常规数组,例如prime[n-1]