首页 > 解决方案 > 如何在 C 中为素数筛算法设置可变长度数组?

问题描述

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

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

为了实现这一点,我想创建一个长度为n的数组并递归循环这个数组,丢弃我不再关心的整数(通过将它们更改为 0)。

然而,我发现的问题是 c 不允许可变长度的数组。我以为我通过这个技巧比这条规则更聪明了一点:

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

但遗憾的是,即使是赋予函数的变量也不行。

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

标签: carraysprimes

解决方案


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

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

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


推荐阅读