diff --git a/算法/A类:基本算法/3.9 位运算算法.md b/算法/A类:基本算法/3.9 位运算算法.md index ab11b926..f26b844c 100644 --- a/算法/A类:基本算法/3.9 位运算算法.md +++ b/算法/A类:基本算法/3.9 位运算算法.md @@ -17,7 +17,7 @@ 操作 | 性质 |-----| -----| n & (n - 1) | n中的最后一个1变成0。 -n & (\~n + 1) | lowbit()运算,n中最后一个1保留。 +n & (\~n + 1)
n&(n^(n-1)) | lowbit()运算,n中最后一个1保留。 (\~n) + 1== -n | 计算机中补码表示的-n。位运算取反 n/2 | 等价于 右移一位 n >> 1 n*2 | 等价于 左移一位 n << 1 diff --git a/算法/A类:基本算法/4.12 gcd&lcm.md b/算法/A类:基本算法/4.12 gcd&lcm.md new file mode 100644 index 00000000..021cc3c3 --- /dev/null +++ b/算法/A类:基本算法/4.12 gcd&lcm.md @@ -0,0 +1,112 @@ +## 最大公约数 + +### 循环法 + +``` +#include + +using namespace std; + +int gcd1(int x,int y){ + if(x%y==0){ + return y; + } + return gcd1(y,x%y); +} + +int gcd2(int x,int y){ + int r = x % y; + while( r ) + { + x = y; + y = r; + r = x % y; + } + return y; + +} + +int lcm(int x,int y){ + int k = gcd2(x,y); + return x*y/k; +} +int main(){ + int x=60,y=95; + cout< + +using namespace std; + +int gcd1(int x,int y){ + if(x%y==0){ + return y; + } + return gcd1(y,x%y); +} + +int gcd2(int x,int y){ + int r = x % y; + while( r ) + { + x = y; + y = r; + r = x % y; + } + return y; + +} + +int lcm(int x,int y){ + int k = gcd2(x,y); + return x*y/k; +} +int main(){ + int x=60,y=95; + cout< + +using namespace std; + +int gcd1(int x,int y){ + if(x%y==0){ + return y; + } + return gcd1(y,x%y); +} + +int gcd2(int x,int y){ + int r = x % y; + while( r ) + { + x = y; + y = r; + r = x % y; + } + return y; + +} + +int lcm(int x,int y){ + int k = gcd2(x,y); + return x*y/k; +} +int main(){ + int x=60,y=95; + cout< + +using namespace std; + +int gcd1(int x,int y){ + if(x%y==0){ + return y; + } + return gcd1(y,x%y); +} + +int gcd2(int x,int y){ + int r = x % y; + while( r ) + { + x = y; + y = r; + r = x % y; + } + return y; +} + +int lcm(int x,int y){ + int k = gcd2(x,y); + return x*y/k; +} +int main(){ + int x=60,y=95; + cout<