关于==0与!的区别
  • 板块学术版
  • 楼主BlachSnake
  • 当前回复15
  • 已保存回复15
  • 发布时间2021/10/10 14:10
  • 上次更新2023/11/4 04:10:54
查看原帖
关于==0与!的区别
285373
BlachSnake楼主2021/10/10 14:10

今天我复习线性筛的时候,交了一份代码,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;//区别1
		for(int j=1;j<=t&&1ll*i*p[j]<=n;++j){
			b[i*p[j]]=1;
			if(i%p[j]==0)break;//区别2
		}
	}
}

交完之后我立马就惊了,只是把!改成了==0==false,程序的效率就提升了2倍多?

请问这是怎么回事……

2021/10/10 14:10
加载中...