如何解决为什么从当前素数的平方开始第二个埃拉托色尼筛法循环?
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 举报,一经查实,本站将立刻删除。