关于gcd的写法
作者:
peng0x0
,
2021-07-10 13:59:06
,
所有人可见
,
阅读 426
//while循环 此段代码a、b可以为0
int gcd(int a,int b) {
int r;
while(b>0) {
r=a%b;
a=b;
b=r;
}
return a;
}
//三目运算符 此段代码a、b可以为0
int gcd(int a,int b) {
return b>0 ? gcd(b,a%b):a;
}
//位运算 此段代码a、b不能为0
int gcd(int a,int b) {
while(b^=a^=b^=a%=b);
return a;
}
/*(b^=a^=b^=a%=b)相当于(b^=(a^=(b^=(a%=b))))相当于a%=b,b^=a,a^=b,b^=a
其中b^=a,a^=b,b^=a相当于swap(a,b),详见卡常技巧第3条。
所以(b^=a^=b^=a%=b)等价于a%=b,swap(a,b),这就是gcd函数的一般写法。*/
//if+while 此段代码a、b可以为0
int gcd(int a,int b) {
if(b) while((a%=b) && (b%=a));
return a+b;
}
//辗转相除法 此段代码a、b不能为0
int gcd(int a,int b) {
if(a%b==0) return b;
else return (gcd(b,a%b));
}
//gcd库函数 此段代码a、b可以为0
#include <algorithm>
int gcd(int a,int b) {
return __gcd(a,b);
}
舔一舔 小鹏太强了