对于初学者来说,在作业中写入了来编写函数,该函数使用素数向量来检查数字是否为素数。
这个循环
for (int j = 2; j < i; ++j)
if (i % j == 0)
break;
else
primes.push_back(j);
,因为它不使用矢量检查i
是否是向量的一个元素整除没有意义。另外,一个新的质数应该在循环提供给我可以被矢量的任何一个元素整除后加入到矢量中。
还要考虑到有写在作业
然后写一个循环,变为从1 至100,检查每一个数目 看它是否是一个素
因此,只有我的代码如下所示才能满足作业。:)
该程序可以采用以下方式。我使用unsigned int
类型而不是int
类型,因为您只检查非负值。
#include <iostream>
#include <vector>
bool is_prime(const std::vector<unsigned int> &primes, unsigned int x)
{
std::vector<unsigned int>::size_type i = 0;
while (i < primes.size() && x % primes[i] != 0) ++i;
return x != 1 && i == primes.size();
}
int main()
{
const unsigned int N = 100;
std::vector<unsigned int> primes;
for (unsigned int i = 1; i <= N; ++i)
{
if (is_prime(primes, i)) primes.push_back(i);
}
for (unsigned int x : primes) std::cout << x << ' ';
std::cout << std::endl;
return 0;
}
程序输出是
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
*如何*你知道的价值'j'不会改变?您是否使用调试器完成了代码? –
我想我现在有一个真正的问题是,结果不是我想要的。 –
另请注意,您将向您的矢量添加大量重复项。你可能想重新考虑你的算法。这可能是你的问题。 –