Furcifer's blog

By Furcifer, history, 8 years ago, In English

Lets say I have a Big Integer A and an integer B . I want to calculate A mod B in O(number_of_digits_in(A)) complexity.

How can I do that?

  • Vote: I like it
  • +3
  • Vote: I do not like it

| Write comment?
»
8 years ago, # |
  Vote: I like it +23 Vote: I do not like it

Modular arithmetic is a great help here.

Let's say that A = 10k - 1·ak - 1 + 10k - 2·ak - 2 + ... + 100·a0, where ai are digits of A. You have to calculate that expression modulo B. Note that you can easily calculate in linear time: just start with 100 = 1 and then multiply by ten (and apply modulo afterwards) until you have all k values. Now the expression is slightly simpler: you only have small numbers, so you can just calculate it straightforwardly, applying modulo after each operation.

Another approach: A = a0 + 10·(a2 + 10·(... + 10·(ak - 1)...)). You start calculating that expression from inside: ak - 1, then you multiply it by ten and add ak - 2, and so on until a0.