MnZn 求助 gcd
  • 板块灌水区
  • 楼主yanyan2
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/7/30 16:41
  • 上次更新2024/7/30 17:47:36
查看原帖
MnZn 求助 gcd
1087963
yanyan2楼主2024/7/30 16:41

rt.

学习了二进制 gcd,于是写了这两份代码。

int gcd(int a, int b) {
	int az = __builtin_ctz(a);
	int bz = __builtin_ctz(b);
	int z = az < bz ? az : bz, d;
	b >>= bz;
	while((a >>= az) ^ b) {
		d = b - a;
		az = __builtin_ctz(d);
		if(a < b)b = a, a = d;
		else a = -d;
	}
	return b << z;
}
int gcd(int a, int b) {
	int az = __builtin_ctz(a);
	int bz = __builtin_ctz(b);
	int z = az < bz ? az : bz, d;
	b >>= bz;
	while((a >>= az) ^ b) {
		d = b - a;
		az = __builtin_ctz(d);
		if(a < b)b = a;
		a = d <= 0 ? -d : d;
	}
	return b << z;
}
2024/7/30 16:41
加载中...