微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么从当前素数的平方开始第二个埃拉托色尼筛法循环?

如何解决为什么从当前素数的平方开始第二个埃拉托色尼筛法循环?

vector<bool>vc(100006,1);
void seive(int n)
{
    vc[0]=vc[1]=0;
    int i,j;
    for(i=2;i*i<=n;i++)
    {
        if(vc[i]==1)
        {
            for(j=i*i;j<=n;j=j+i)
            {
                vc[j]=0;
            }
        }
    }

}

我的问题是为什么第二个循环从 i 的平方开始。当前素数(i)的平方之前的倍数是如何被标记的?实际上我们如何确定它?

解决方法

如果我们已经标记了对应于 3*5 的条目,那么标记对应于 5*3 的条目就没有意义了。

所以我们从 5*5 开始——就像我们之前从 3*3 开始一样,并且确实在 3*5 = 3*3+3+3 的循环过程中标记了 i=3 条目}}。

概括这个论点可以回答你的问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。