Efficient Remainders for Powers of 2

Revision en1, by fornaxx, 2024-11-13 22:41:02

Result: x % n = x & (n-1), where n is some power of 2 i.e. n = 1 << i.

Why this works?

Lets take an example of 14 % 4,

14 = 1110 = 8(4th-Bit) + 4(3rd-Bit) + 2(2nd-Bit) + 1(1st-Bit)
14 = 8 + 4 + 2 + 0
14 = (4*2) + (4) + 2 + 0

This implies 14 % 4 = (4*3 + 2) % 4 = 2 % 4 = 2 i.e. only the last two bits of 14 contribute to the remainder when dividing by 4. In general, when dividing by 1 << i, only the last i bits of x determine the remainder. This remainder can be computed efficiently with x & (n - 1).

Uses

Though a simple observation, but can be leveraged to solve some interesting variations of problem, try Make Almost Equal With Mod.

Tags bitmask, remainder, number theory

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en1 English fornaxx 2024-11-13 22:41:02 790 Initial revision (published)