【发布时间】:2014-06-09 11:44:10
【问题描述】:
这是我用 C 语言进行 Eratosthenes 筛分的代码。 它给了我以下输出。
2 3 5 7 11 13 17 19 23 25 31 35 37 41 43 47
我的输出包括 25 和 35,它们也不是素数,也不包括 29。
谁能告诉我哪里错了。
#include<stdio.h>
#include<math.h>
int main()
{
int i,a[50],b[50],j,n=0,s;
for(i=0;i<50;i++)
a[i] = 1;
a[0]=a[1] = 0;
for(i=2;i<50;i++)
if(a[i])
for(j=pow(i,2);j<50;j+=i)
a[j] = 0;
for(i=0;i<50;i++)
if(a[i])
{
b[n] = i;
n++;
}
for(j=0;j<n;j++)
printf("%d\n",b[j]);
return 0;
}
【问题讨论】:
-
我无法重现该错误。也许你对
pow()有不同的实现。请改用i*i。 -
对我来说也一样。请指定编译器版本和更多环境细节。
-
并且在没有优化标志的情况下编译(如果 gcc)
-
请指定编译器
-
不相关,但我建议使用比
a和b更具描述性的变量名称。
标签: c++ c algorithm math sieve-of-eratosthenes