我正在尝试创建一个程序,该程序输出给定输入值的素数列表,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'
时我的筛选功能正常,但我无法在主函数中打印完整的素数列表。
非常感谢任何帮助。谢谢!
答案 0 :(得分:4)
您无法通过计算sizeof(num_primes)
来确定素数的数量:这是一个编译时常量,它不会随您在num_primes
中放置的值而改变。看起来您的系统对int
使用了四个字节,因此从零到大小为+ 1(包括0和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
,并避免内存泄漏。