【发布时间】:2010-06-16 07:48:22
【问题描述】:
我一直在尝试通过 Code::Blocks 在我的 MinGW 上执行这个程序:
#include <string.h>
#include <math.h>
#include <stdio.h>
#define N 100
int p[N];
int pr[N];
int cnt;
void sieve()
{
int i,j;
for(i=0;i<N;i++) pr[i]=1;
pr[0]=pr[1]=0;
for(i=2;i<N;i++)
if(pr[i])
{
p[cnt]=i; cnt++;
for(j=i+i;j<=N;j+=i) pr[j]=0;
}
}
int main(){
sieve();
int i;
for(i=0;i<cnt;i++)
printf("%d ",p[i]);
puts("");
printf("Total number of prime numbers : %d",cnt);
return 0;
}
在我的系统上,输出是:
7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
素数总数:22
这完全是疯了,因为我完全确定我的算法的实现。
所以我决定在Ideone 中尝试它,它可以提供正确的输出。谁能指出原因?
我把它改成了N,但是输出没有变化。
【问题讨论】:
-
为什么
p只有两个元素? (N / 64?) 编辑:哎呀,我的数学很烂。这是一个元素。 -
@avakar 我虽然 100/64 会被截断为 1,所以这是一个大小为 1 的数组。我错过了什么吗?编辑:忍者编辑比我快。
-
提示 - 编译器错误比您自己的代码中的错误少几个数量级 - 它们应该是您在尝试解决问题时考虑的最后一件事,而不是第一个。
-
当有人问“
中是否有错误?!”好的答案经常是:“不,再次检查您的代码”。