gpt4 book ai didi

c - 不打印 eratosthene 筛所需的输出

转载 作者:行者123 更新时间:2023-12-01 12:43:12 25 4
gpt4 key购买 nike

我正在尝试创建一个程序,它在给定输入值 n 的情况下输出素数列表。

我制作的 SieveEratosthenes 函数:- 生成前 n 个整数的素数列表- 为生成的素数列表创建存储- 返回生成的素数数。

这是我的主要功能中的代码:

int main(){
int n, i;
int *primes;

printf("Number that needs to be prime factorized: ");
scanf("%d", &n);

int num_primes;

num_primes = SieveEratosthenes(n, &primes);
printf("Generated a list of %d primes\n", num_primes);
printf("\n");

for (i = 0; i <= sizeof(num_primes) + 1; i++){
printf("%d", *primes++);
}
printf("\n");

return 0;
}

假设 n = 20;我的输出是:

'生成了一个包含 8 个素数的列表

2 3 5 7 11 13'

当我想要的输出应该是'2 3 5 7 11 13 17 19'

我的筛选函数工作正常,但我无法在我的主函数中打印出整个素数列表。

任何帮助将不胜感激。谢谢!

最佳答案

您无法通过计算sizeof(num_primes) 来确定素数的数量:这是一个编译时常量,它不会随着您在num_primes 中输入的值而改变.看起来您的系统对 int 使用了四个字节,因此从零迭代到 sizeof+1,包括索引 0、1、2、3、4 和 5,这与您的一致观察打印了六个数字。

如果 SieveEratosthenes 返回它找到的素数的数量,您的循环应该从零迭代到该数字,而不是 sizeof(num_primes):

for (i = 0; i != num_primes ; i++){
printf("%d", primes[i]);
}

请注意,我将 *primes++ 更改为 primes[i]。这是为了帮助您在完成后释放 primes,并避免内存泄漏。

关于c - 不打印 eratosthene 筛所需的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22311874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com