# Determine if an integer is divisible by 3

## C - 2 tokens

```
int div3(int x) {
return x * 0xAAAAAAAB <= x;
}
```

Seems to work up to 2^{31}-1.

Credits to `zalgo("nhahtdh")`

for the multiplicative inverse idea.

## Python, ~~3~~ 2 tokens

Brute force solution, but it works.

```
0x9249249249249249249249249249249249249249249249249249249249249249>>x&1
```

Thanks to Howard for the 1 token reduction.

### C - ~~5~~ 4 (?) tokens

```
int div3_m2(uint32_t n) {
return n == 3 * (n * 0xAAAAAAABull >> 33);
}
```

Works for **any unsigned 32-bit number**.

This code makes use of multiplicative inverse modulo 2^{32} of a divisor to convert division operation into multiplication operation.

**Edit**

My solution (posted 2 minutes after) has the same spirit as aditsu's solution. Credit to him for the use of `==`

that improves my solution by 1 token.

### Reference

- Labor of Division - ridiculousfish.com
- Hacker's Delight - Magic Number
- Wikipedia - Modular multiplicative inverse