1 const int mod = 1000;
2
3 int bitpow(int x, int n) {
4 int ans = 1;
5 int t = x;
6 while(n) {
7 if(n & 1) {
8 ans = (ans * t) % mod;
9 }
10 t = t * t % mod;
11 n >>= 1;
12 }
13 return ans;
14 }
15
16 int bitadd(int x, int y) {
17 int xr = x ^ y;
18 int nd = x & y;
19 while(nd) {
20 int xr1 = xr;
21 int nd1 = nd << 1;
22 xr = xr1 ^ nd1;
23 nd = xr1 & nd1;
24 }
25 return xr;
26 }
27
28 int negtive(int x) {
29 return bitadd(~x, 1);
30 }
31
32 int bitminus(int x, int y) {
33 return bitadd(x, negtive(y));
34 }
35
36 int bitmulti(int x, int y) {
37 int ans = 0;
38 while(y) {
39 if(y & 1) {
40 ans = bitadd(ans, x);
41 }
42 x = (x << 1);
43 y = (y >> 1);
44 }
45 return ans;
46 }
47
48 int bitdiv(int x, int y) {
49 int ans = 0;
50 for(int i = 31; i >= 0; i--) {
51 if((x>>i) >= y) {
52 ans += (1<<i);
53 x -=(y<<i);
54 }
55 }
56 return ans;
57 }