c++ - Eratosthenes C++ 实现的筛选(来自于 Soustrup C++ 编程原理一书)
问题描述
我已经尝试过我自己的算法实现,虽然它有效,但我确信它没有像算法应该的那样工作。这是代码:
#include "std_lib_facilities.h"
int main()
{
vector<int> primes;
int input;
cin >> input;
for (int i =2;i<input;++i)
primes.push_back(i);
for (int j = 0; j<sqrt(input);++j)
for (int i =j; i<primes.size();++i)
if (i==j)
{
}
else if (primes[i] % primes[j] == 0)
primes.erase(primes.begin() + (i));
cout << "Prime numbers are: "<<primes.size()<<endl;
for (int j =0;j<primes.size();++j)
cout <<primes[j]<<"; ";
}
虽然我找到了这个解决方案,但这不允许我从 2/3/5/7 的倍数开始,它只需要迭代 1 并且很难实现,因为素数向量大小总是在变化。
我不明白你如何“标记”非素数,然后你删除它们并保留素数,所以这就是 primes.erase 函数的推理。
如果我要列出在另一个向量中找到的非素数,并且在我找到所有非素数之后,从元素 1,2...n 的向量中减去非素数向量是否会更有效?在这种情况下,我们讨论的是本书迄今为止尚未描述的功能。
解决方案
推荐阅读
- firebase - BigQuery 获取来自 firebase 分析的 event_timestamp 和当前时间戳之间的差异
- javascript - 如果页面在滚动后重新加载,如何记住功能的位置?
- ios - 滚动表视图导致复选标记消失 | 在 Swift 5 中处理可重用单元
- excel - python中的for循环并导出到excel
- google-cloud-dataflow - UserCodeException:java.lang.OutOfMemoryError:流式自动缩放时的 Java 堆空间
- javascript - 当我单击“计算”按钮时,它不会在文本框中显示销售税和总计的计算
- reactjs - 从 react.js 中的单独文件返回 json
- azure-maps - 如何在 Azure-Maps Get Search Address API 中传递两位数的“州代码”或“州名”?
- salesforce - 从一个 LWC 导航到另一个 LWC
- javascript - 当我调用 axios 请求时如何让微调器显示