用筛选法求100以内的素数,C语言

#include<stdio.h>
int main()
{int i,j,a[100],n=0;
for(i=1;i<=100;i++)
a[i]=i;
a[1]=0;
for(i=2;i<=100;i++)
for(j=i+1;j<=100;j++)
{if(a[j]!=0&&a[i]!=0)
if(a[j]%a[i]==0)
a[j]=0;
}
for(i=1;i<=100;i++)
{if(a[i]!=0)
{printf("%5d",a[i]);
n++;}
if(n==10)
{printf("\n");
n=0;}
}
printf("\n");
return 0;
}

这个是有问题的,最后会输出到101.把int a[100]改成101就会输出至97.。。这个是什么问题。
不懂
100的情况下,数组a[100]在第一个for不是给所有赋值了吗 ? 最大的一个数a[99]=99 ,怎么出来101

第1个回答  推荐于2016-03-03
#include<stdio.h>
int p[100]={2};
int main(){
int i,j,k,s,d;
for(i=1;i<100&&p[i-1]<100;i++)
for(j=p[i-1]+1;;j++){
d=1;
for(k=0;k<i;k++)
if(j%p[k]==0)d=0;
if(d){
p[i]=j;
break;}}
for(i=0;i<100&&p[i]<100;i++)
printf("%d\n",p[i]);
return 0;}追问

额,,,我想知道我哪里错了,答案的话网上大把。

追答

定义至a[101]
你的循环
for(i=2;i<=100;i++)
for(j=i+1;j<=100;j++)
都能到100,如果定义a[100],就会越界

追问

哦,原来是这样,谢谢。

本回答被提问者采纳
相似回答