如何解决在C语言的Eratosthenes代码筛中显示结果时出现问题
我正在用C编写“ Eratosthenes筛”的代码,该代码将打印所有素数到n。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include "input2.h"
int main()
{
int n = read_int();
int length = n-1;
int *block_of_memory = (int *)malloc(sizeof(int));
for(int i = 2; i <= length; i++)
{
block_of_memory[i] = 1;
}
for(int i = 2; i*i <= length; i++)
{
if(block_of_memory[i] == 1)
{
for(int j = i*i; j < length; j = j+i)
{
block_of_memory[j] = 0;
}
}
}
for (int i = 1; i <= length; ++i)
{
if(block_of_memory[i] == 1)
{
printf("%d\n",i);
}
}
print_prime(block_of_memory,length);
free(block_of_memory);
return 0;
}
我不确定我在做什么错。当我想要所有主要的住宅区5(例如)时,我得到:
Give a number: 5
1
1
4,5,
解决方法
您没有分配足够的内存:
int *block_of_memory = (int *)malloc(sizeof(int));
实际上应该是:
int *block_of_memory = malloc(n * sizeof(int));
这样,您可以为整个n
个int数组分配空间,而不仅仅是一个int。另外,never cast the result of malloc。此外,您的代码还有一些逻辑错误:
for(int j = i*i; j < length; j = j+i)
{
block_of_memory[j] = 0;
}
实际上应该是:
for(int j = i*i; j <= length; j = j+i)
{
block_of_memory[j] = 0;
}
(请注意,< length
变为<= length
)。这样,每个元素都会得到正确检查,包括length - 1
处的元素。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。