卡了我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;
}