【发布时间】:2021-12-10 11:24:39
【问题描述】:
我是编程新手,我必须以五行显示所有作为此代码乘积的素数。经过太多小时试图在网上找到一些东西,这就是我想出的。这样,最后连质数都不会显示;一路只有1s。我很高兴知道我做错了什么或者我可以改变什么。
#include <iomanip>
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
int main() {
int n { 0 };
cout << "Please enter an initial value n<2000 in order for the calculation to begin: " << endl;
cin >> n;
vector<bool> cygnus(n + 1);
for (int m = 0; m <= n; m++) {
cygnus[m]=true;
}
for (int j = 2; j < n; j++) {
if (cygnus[j] == true) {
for (int i = j + 1; i <= n; i++) {
if (i % j == 0) {
cygnus[i] = false;
}
}
}
}
int s = 0;
for (auto value : cygnus) {
if (value == true && s > 0) {
for (int counter = s; counter++; ) {
if (counter % 5 == 0) {
cout << setw(3) << s << " \n ";
}
if (counter % 5 != 0) {
cout << setw(3) << s << " ";
}
}
}
s++;
}
cout << endl;
return 0;
}
【问题讨论】:
-
附注:
m<n而不是m<=n在“for”测试中,i<=n相同,否则您试图访问数组中超出范围的索引。 -
最适合您的情况是使用调试器在应用程序运行时检查值。如果您不使用调试器,请在任何地方放置很多带有您要检查的值的“cout”,以便查看发生了什么。
-
@Ripi2 实际上,我刚刚注意到:向量是用
n + 1元素初始化的,所以m<=n是可以的。我在回答中犯了同样的错误,我将更正。
标签: c++ loops vector counter primes