gpt4 book ai didi

C++ Sieve of Eratosthenes 错误 - 需要帮助修复语法

转载 作者:行者123 更新时间:2023-11-27 23:12:32 26 4
gpt4 key购买 nike

我更多地来自 java/php 背景,我现在正在学习 C++。我试图用 C++ 重新创建埃拉托色尼筛法并打印出 5000 以下的所有素数。

我正在用 http://www.compileonline.com/compile_cpp_online.php 编写和编译这段代码

请看代码和错误信息:

代码:

#include <iostream>

using namespace std;

bool sieve[](int max)
{
bool primes[max];

primes[0] = false;
primes[1] = false;

for(int a = 2; a < max; a++)
{
primes[a] = true;
}

for(int i = 2; i < max; i++)
{
if(primes[i])
{
for(int j = 2*i; j < max; j+=i)
{
bool primes[j] = false;
}
}
}

return primes;
}

int main()
{
bool[] primes = sieve(5000);

for(int i = 2; i < primes.size; i++)
{
if(primes[i])
{
cout << i << endl;
}
}
}

错误信息:

$g++ main.cpp -o demo -lm -pthread -lgmpxx -lgmp -lreadline 2>&1
main.cpp:5:5: error: expected unqualified-id before '[' token
bool[] sieve(int max)
^

最佳答案

使用vector,数组在C++ 中不能很好地工作。特别是对于数组,你不能

  • 将其传递给一个函数
  • 从一个函数返回它
  • 将一个数组分配给另一个数组

这是使用 vector 的代码。

#include <iostream>
#include <vector>
using std::vector;
using std::cout;
using std::endl;


vector<bool> sieve(int max)
{
vector<bool> primes(max);

primes[0] = false;
primes[1] = false;

for(int a = 2; a < max; a++)
{
primes[a] = true;
}

for(int i = 2; i < max; i++)
{
if(primes[i])
{
for(int j = 2*i; j < max; j+=i)
{
primes[j] = false;
}
}
}

return primes;
}

int main()
{
vector<bool> primes = sieve(5000);

for(int i = 2; i < primes.size(); i++)
{
if(primes[i])
{
cout << i << endl;
}
}
}

关于C++ Sieve of Eratosthenes 错误 - 需要帮助修复语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19159493/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com