卡了我2个小时,NO,好像是3个小时/cry,实在想不出来原因,问了群里的大佬才明白 是怎么回事了,数组越界!!!数组越界!!!数组越界!!! #include <cstdio> #include <iostream> #define M 1000 //测试M等于10且N等于10,M等于100且N等于100prime[0]都是2 #define N 1000//可当M等于1000,N等于1000的时候,prime[0]怎么输出是1呀????? using namespace std; int pri[M]; //注意pri数组共有M个元素,没有pri[M]这个元素 int prime[N]; //保存的素数表 void f() //埃氏筛法 { int j=0; for(int i=2;i<=M;i++) //当i等于M时 { if(!pri[i]) //执行pri[M]已经越界了,强调没有pri[M]这个元素,是共有M个元素 { prime[j++]=i; int k=2; while((i*k)<=M) //当i*k等于M时 { pri[i*k]=1;//pri[i*k]也越界了 k++; } } } } int main() { f(); for(int i=0;i<=10;i++) cout<<prime[i]<<endl; return 0; }