C 求素数时的推进错误
生成素数的问题。 在不使用优化的情况下,接近使用过的埃拉顿筛。 问题代码仅生成2和3C 求素数时的推进错误,c,algorithm,sieve-of-eratosthenes,C,Algorithm,Sieve Of Eratosthenes,生成素数的问题。 在不使用优化的情况下,接近使用过的埃拉顿筛。 问题代码仅生成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(pri
#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。除了您知道的问题之外,在i=2的嵌套循环中还有一个潜在的缓冲区溢出;我
for(i=2;primes[i]!=0&&i<=20;i++){
printf("%d\n",i);
}
for(i=2;i<=20;i++){
if (primes[i] != 0){
printf("%d\n",i);
}
}