社区讨论

手写GCD函数的记得处理负数情况

P10463Interval GCD参与者 4已保存回复 4

讨论操作

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

当前回复
3 条
当前快照
1 份
快照标识符
@mig6sx8r
此快照首次捕获于
2025/11/26 23:56
3 个月前
此快照最后确认于
2025/11/27 08:40
3 个月前
查看原帖
如题,c++中的取模运算是向下取整的,所以这样:
CPP
int gcd(int x,int y){
    if(x==0)reurn y;
    return gcd(y%x,x);
}
xxyy 是负数时答案就错了,因为y%x的值不再是 ymodx|y|mod|x|的值了
应该是这样:
CPP
int gcd(int x,int y){
	if(x<0||y<0)x=llabs(x),y=llabs(y);
	if(x==0)return y;
	return gcd(y%x,x);
}
然后线段树中所有操作都不用取绝对值了

回复

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

正在加载回复...