关于埃拉托斯特尼筛法(Sieve of Eratosthenes)及其C++实现的问题
小弟这几天在做有关埃拉托斯特尼筛法的C++习题,在查阅了许多资料后,我写下了如下代码:
我的目的是输入正整数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(请大家自备云梯……)
谢谢大家了!请大家多多指教!
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(请大家自备云梯……)
谢谢大家了!请大家多多指教!
...全文
相关推荐
cpp代码-一定范围内的素数
这个程序可能使用了不同的算法来实现这一功能,如埃拉托斯特尼筛法(Sieve of Eratosthenes)或者更简单的质数检测方法,比如试除法。
筛选素数问题
筛选法,也被称为埃拉托斯特尼筛法(Sieve of Eratosthenes),是一种古老的算法,其优点在于能够显著降低时间复杂度,提高寻找素数的效率。
CPP.rar_cpp 判断质数_素数cpp
**素数打表法Ⅱ:** - **优化版打表法**:与第一种方法类似,但可能采用了更高效的算法,比如埃拉托斯特尼筛法(Sieve of Eratosthenes)。
C++-leetcode题解之204-Count-Primes.cpp
在C++中实现高效的质数统计,通常会使用埃拉托斯特尼筛法(Sieve of Eratosthenes),这种方法通过反复筛选和标记,能快速地找出指定范围内的所有质数。
cpp求质数_一例
尼罗河筛法,又称为埃拉托斯特尼筛法(Sieve of Eratosthenes),是一种古老且高效的找出所有小于给定整数N的质数的方法。


新手乐园
