关于埃拉托斯特尼筛法(Sieve of Eratosthenes)及其C++实现的问题

雨夜独行的人 雨夜独行的人 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
小弟这几天在做有关埃拉托斯特尼筛法的C++习题,在查阅了许多资料后,我写下了如下代码:
int main()
{
//向量元素值若为1,则元素序数为质数;向量元素若为0,则元素序数不是质数。
cout << "Please enter the upper limit: ";
int n,i,multiple,k;
cin >> n;
vector<int>primes;
for (i = 0; i < n + 1; ++i)
primes[i] = 1;
primes[0] = 0; //0,1都不是质数
primes[1] = 0;
for (i = 2; i < n + 1;++i)
{
if (primes[i]==1)
{
for (multiple=2;i*multiple<=sqrt(n);++multiple)
primes[i*multiple] = 0;
}
}
for (k = 2; k < n + 1;++k)
{
if (primes[k] == 1)
cout << k << endl;
}
}

我的目的是输入正整数n,输出所有小于n的质数。代码编译没有问题,但是运行时出现了错误:

看样子好像是向量范围出错了,但是我不明白具体的错误原因。请大家指教!
关于埃拉托斯特尼筛法,我主要参考了:
维基百科:https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
算法百科:http://www.algorithmist.com/index.php/Prime_Sieve_of_Eratosthenes
和YouTube上的一个讲解视频:https://www.youtube.com/watch?v=eKp56OLhoQs(请大家自备云梯……)
谢谢大家了!请大家多多指教!
...全文

相关推荐

评论 10
收藏 已收藏
分享
返回顶部
雨夜独行的人
新手乐园 33,315 成员 41,769 内容