社区讨论

关于GCD二进制优化的疑问

学术版参与者 8已保存回复 15

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
15 条
当前快照
1 份
快照标识符
@mi6yz638
此快照首次捕获于
2025/11/20 13:07
4 个月前
此快照最后确认于
2025/11/20 15:39
4 个月前
查看原帖
100000000*普通gcd:13.455秒
CPP
int gcd(int x,int y){
    return (!y)?x:gcd(y,x%y);
}
100000000*二进制优化GCD:23.17秒
CPP
int GCD(int x,int y){
	int i=0,j=0;
	if(!x)return y;
	if(!y)return x;
	while(!(x&1))x>>=1,i++;
	while(!(y&1))y>>=1,j++;
	if(j<i)i=j;
	while(1){
		if(x<y)x^=y,y^=x,x^=y;
		if(!(x-=y))return y<<i;
		while(!(x&1))x>>=1;
	}
}
居然优化后变慢了!

回复

15 条回复,欢迎继续交流。

正在加载回复...