今天我复习线性筛的时候,交了一份代码,7.14s
然后我看了一下我之前跑的最快的一次,2.81s
接着我又比了一下,发现两份代码的区别只有两个:
7.14s的线性筛是这样写的:
void Prime(){
b[1]=1;
for(int i=2;i<=n;++i){
if(!b[i])p[++t]=i;
for(int j=1;j<=t&&1ll*i*p[j]<=n;++j){
b[i*p[j]]=1;
if(!i%p[j])break;
}
}
}
2.81s的线性筛是这样写的:
void Prime(){
b[1]=1;
for(int i=2;i<=n;++i){
if(b[i]==false)p[++t]=i;
for(int j=1;j<=t&&1ll*i*p[j]<=n;++j){
b[i*p[j]]=1;
if(i%p[j]==0)break;
}
}
}
交完之后我立马就惊了,只是把!改成了==0或==false,程序的效率就提升了2倍多?
请问这是怎么回事……