【发布时间】:2015-01-23 18:48:28
【问题描述】:
问题-生成素数。
使用的方法 - 不使用优化的 Erathones 筛。
问题代码仅生成 2 和 3。
#include<stdio.h>
int main()
{
int i,j;
int primes[100];
for(i=0;i<=20;i++)
{
primes[i]=1;
}
primes[0]=0;primes[1]=1;
for(i=2;i<=20;i++)
{
if(primes[i]==1)
{
for(j=2;i*j<=20;j++){
primes[i*j]=0;
}
}
}
for(i=2;primes[i]!=0&&i<=20;i++)
{
printf("%d\n",i);
}
return 0;
}
【问题讨论】:
-
问题是……
-
为什么代码没有给出所需的输出。它只给出 2 和 3。
-
除了您知道的问题之外,您的嵌套循环
for(i=2;i<=20;i++)和for(j=2;j<=20;j++)中存在潜在的缓冲区溢出。例如,当外部循环将i设置为19 时,内部循环将遍历j直到20,结果它将设置primes[19*20]=0。但是 19*20=380,而primes只分配了 100 个元素。
标签: c algorithm sieve-of-eratosthenes