啊,这个错误很多呀,
#include <iostream>
#include <cmath>
using namespace std;
int main(void)
{
int a[200];
int m;
int i, j;
m = sqrt(200);
// for (i = 1; i <= 200; i++) 错误,访问超下标了
for (i = 1; i < 200; i++)
{
a[i] = i;
a[1] = 0; // 这儿倒是没错,建议挪到循环外面节约时间
}
for (i = 2; i <= m; i++)
{
// for (j = i + 1; j <= 200; i++) // 这里是精髓,迭代条件是最大的错误,当然循环其它部分也不对
for (j = i + i; j < 200; j += i)
{
// 这一块不知道题主是什么思路,迷了
// if (a[j] % a[i] == 0)
// a[j] = 0;
a[j] = 0;
}
}
// for (i = 1; i <= 200; i++) 还是循环问题
for (i = 1; i < 200; i++)
{
if (a[i] != 0)
cout << "prime:" << a[i] << endl;
}
return 0;
}
个人写的0-999内质数罗列的代码,可以参考一下
#include <iostream>
#include <cmath>
using namespace std;
int main(void)
{
int a[1000];
// 初始化
for (int i = 0; i < 1000; i++)
a[i] = 1;
a[0] = a[1] = 0;
for (int i = 2; i < 1000; i++)
for (int j = i + i; j < 1000; j += i)
a[j] = 0;
for (int i = 0; i < 1000; i++)
if (a[i])
cout << i << endl;
return 0;
}
望采纳,谢谢!
你的问题很多。首先数组下标从0开始,你定义200长度,a[200]是第201个,数组越界了。
第二,下面双循环里面,第二个j循环里面为什么是i++?