首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要帮助优化c++中的Eratosthenes筛子

需要帮助优化c++中的Eratosthenes筛子
EN

Stack Overflow用户
提问于 2015-01-30 00:23:12
回答 1查看 56关注 0票数 0

我已经在埃拉托色尼的筛子上工作几天了。今天是学校的作业,我得去上班了。代码运行完美,但是,我想将其优化为一个循环,而不是列出素除数……有什么建议吗?

代码语言:javascript
复制
void Eratos(int num, vector<int>&primes)
{
    int i;
    //we are setting up the variable for use
    for (i = 2; i <= num; i++)
{
    primes.push_back(i);
}

for (i = 0; i < primes.size(); i++)
{
    if ((primes.at(i) % 2 == 0) && (primes.at(i) != 2))
    {
        //if i is divisible by 2 change value to zero... and so on until 13
        primes.at(i) = 0;
    }
    if ((primes.at(i) % 3 == 0) && (primes.at(i) != 3))
    {
        primes.at(i) = 0;
    }
    if ((primes.at(i) % 5 == 0) && (primes.at(i) != 5))
    {
        primes.at(i) = 0;
    }
    if ((primes.at(i) % 7 == 0) && (primes.at(i) != 7))
    {
        primes.at(i) = 0;
    }
    if ((primes.at(i) % 13 == 0) && (primes.at(i) != 13))
    {
        primes.at(i) = 0;
    }
    if ((primes.at(i) % 17 == 0) && (primes.at(i) != 17))
    {
        primes.at(i) = 0;
    }
    if ((primes.at(i) % 19 == 0) && (primes.at(i) != 19))
    {
        primes.at(i) = 0;
    }
    if ((primes.at(i) % 23 == 0) && (primes.at(i) != 23))
    {
        primes.at(i) = 0;
    }
    if (primes.at(i) == 0)
    {
        //erase all '0' values from vector
        primes.erase(primes.begin() + i); 

        //keep place
        --i;
    }

(如果格式很奇怪,很抱歉,这是我在这里的第一篇文章)

EN

回答 1

Stack Overflow用户

发布于 2015-01-30 00:56:02

不要保存所有数字的列表!

保留一个你已经找到的素数列表,并且只尝试将测试中的数字与找到的素数相除。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28219593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档