位运算基础
位运算
时间 2019年4月7日 星期日 17:22:41
左移
$$1<<n=2^n$$ $$n<<1=2n$$
很好理解
右移
$$1>>n$$ 开方
$$n>>1=|n/2|$$ 向下取整
1 | |
c++中是向0取整
-3/2=-1(|-1.5|)
快速幂
求 $$(a^b)\bmod p$$ $$1<=a,b,p<=10^9$$直接乘会溢出,从二进制角度看待
$$b=b_{k-1} *2^{k-1} + b_{k-2} * 2^{k-2} +…+b_0 * 2^{0}$$
$$a^b=a^{b_{k-1}2^{k-1}} * a^{b_{k-2} * 2^{k-2}}…. *a^{b_0 * 2^{0}} $$
1 | |
同理:
求 $$(a*b)\bmod p$$ $$1<=a,b,p<=10^{18}$$
$$b=b_{k-1} *2^{k-1} + b_{k-2} * 2^{k-2} +…+b_0 * 2^{0}$$
1 | |
另一种方法
$$(ab)\bmod p=(ab)-|a*b/p|p$$
$$|ab/p|$$代表向下取整
1 | |
位运算基础
https://blog.989883.xyz/2019/04/07/csdn/位运算基础/