我编写了以下程序来生成前1000个素数,但我只得到0作为输出:
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
bool p = false;
bool is_prime(int i)
{
int limit = sqrt(i);
if (i == 2)
p = true;
else if (i % 2 == 0)
p = false;
else
{
for (int n = 3; n <= limit; n += 2)
{
if (i % n == 0)
p = false;
else
{
p = true;
}
}
}
return p;
}
vector<int> generate_primes(int x)
{
vector<int> Sieve;
for (int q = 2; q <= x; q += 1)
{
if (is_prime(q) == true)
Sieve.push_back(q);
}
return Sieve;
}
int main()
{
for (int g = 1; g <= 1000; g += 1)
{
vector<int> generate_primes(7919);
cout << generate_primes.at(g);
}
}
显然构建成功了,但为什么我的输出不正确呢?看起来generate_primes正在生成一个空向量,所以我的猜测是问题出在该函数的某个地方,但我似乎无法在我的代码中找到问题。
答案 0 :(得分:3)
这是名为generate_primes
vector<int> generate_primes(7919);
该变量将在更大的范围内使用相同的名称隐藏该函数。
你想要的是调用你已经创建的函数,或许:
vector<int> primes_list;
generate_primes(7919).swap(primes_list);
从C ++ 11开始,使用移动初始化同样有效:
vector<int> primes_list = generate_primes(7919);
你也建议你在循环之外做这件事...现在你的主要打印程序是可以想象的最慢的(至少,那些实际上取得进展的那些)。
答案 1 :(得分:1)
这一行
vector<int> generate_primes(7919);
仅生成名为generate_primes
的变量,其默认大小为7919。
请参阅http://www.cplusplus.com/reference/vector/vector/vector/
不调用该函数。