Skip to main content

Basic Modular Arithmetic

In simple terms, Modular Arithmetic calculates the remainder of anything divided by anything. The later is called modulus. e.g. ( 15 / 7 ) Quotient: 2, Remainder 1. 

In greater sense, modular arithmetic is a system of arithmetic for integers, where numbers "wrap around" upon reaching a certain value—the modulus ( src: Wikipedia ).
Take a look at hour clock. After 12:59 pm, we say 1:00 pm, because we modulo the hours by 12. 13 pm % 12 is 1 pm. (%) represents modulus operator.
Examples: 5 % 2 = 1, 14458948 % 25 = 23

a≡b (mod n)
This says that a is congruent to b modulo n. It means both a and b has same remainder when divided by n. e.g. 38≡14 (mod 12)

Commonly Used Properties:
  • Reflexivity: a ≡ a (mod n)
  • Symmetry: a ≡ b (mod n) if and only if b ≡ a (mod n)
  • Transitivity: If a ≡ b (mod n) and b ≡ c (mod n), then a ≡ c (mod n)
  • If a1 ≡ b1 (mod n) and a2 ≡ b2 (mod n), or if a ≡ b (mod n), then:a + k ≡ b + k (mod n) for any integer k (compatibility with translation)
  • k a ≡ k b (mod n) for any integer k (compatibility with scaling)
  • a1 + a2 ≡ b1 + b2 (mod n) (compatibility with addition)
  • a1 – a2 ≡ b1 – b2 (mod n) (compatibility with subtraction)
  • a1 a2 ≡ b1 b2 (mod n) (compatibility with multiplication)
  • ak ≡ bk (mod n) for any non-negative integer k (compatibility with exponentiation)
Simple C program to perform Modulo:

In CS, modular arithmetic is used in many algorithms where integers become too big to handle.

For more details:

 modulo C.

Comments

Popular posts from this blog

SPOJ - GSS1

Considering input series: { 4 , -10 , 3 , 100 , -20 , 1 } Query(x,y) = Max { a[i]+a[i+1]+...+a[j] ; x ≤ i ≤ j ≤ y } A node contains-  [ START & END is a node's segment limit ] Prefix is the maximum sum starting at START, end can be anywhere. There are two possibilities of the maximum. One, node's leftChild's prefix or two, adding leftChild's sum + rightChild's prefix. (which will make the prefix contiguous) Suffix is the maximum sum ending at END, start can be anywhere. There's two possibility of the maximum. One, node's rightChild's already calculated suffix or two, add rightChild's sum + leftChild's suffix   (which will make the suffix contiguous). Sum : leftChild's sum + rightChild's sum. MAX Maximum of  -  prefix (result is in the node, starts from START but doesn't end in END ) suffix  (result is in the node, doesn't start from START but surely ends in END ) leftChild's max ( result is in left ...

SPOJ 95 - STPAR - Street Parade

Problem Statement Heuristics:   Let, N be the number which is next in fixed order. Take an input X , if it is equal to N then next number will be n++. If not, then search for N in the side lane and after finishing the search, put X in the side lane. After all X is processed but N is not found in either X or side lane, then the order is not possible. Solution:

SPOJ 394- ACODE

Problem Statement As from the problem-tag, you can see this is a DP( Dynamic Programming ) problem. Don't know Dynamic Programming? Here are some articles: Codechef , TopCoder . Try to solve a sample problem, for example, Fibonacci Numbers. Let's start cracking the problem. To solve a DP problem, the hardest and important part is to find the relation between previous or next steps and current step . We need to find out how the solution of the current step depends on its previous steps or next steps. Looking at:      2 5 1 1 4        from left to right Step 1: You can only interpret this as 2(B). Decoding- B EAAD  So, DP[1] = 1 Step 2: This can be 5(E) or collaborating with 2, it can be 25(Y). Result is BE AAD + Y AAD . So, DP[2] = 2 Step 3: Can only be interpreted as 1(A). 51 is not valid, as stated in problem. BEA AD + YA AD . DP[3] = 2.  Step 4: Will be interpreted as 1(A). BEAA D + YAA D+... ...