
2条回答 默认 最新
来把薯条 2021-11-10 11:10关注啊,这个错误很多呀,
#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; }望采纳,谢谢!
本回答被题主选为最佳回答 , 对您是否有帮助呢?评论 打赏 举报解决 1无用