Fibonacci Numbers increase very rapidly as the sequence progresses, but is there a way to compute the modulo of the Fibonacci number that you are interested in. In this article I'll be explaining how I had to find this in order to complete a problem in a programming competition.

In a coding competition there was a problem, which was essentially to find,

$$ {Fib}(n) \ {mod} \ 10 \ {for} \ n \le 10^9 $$

As you may know fibonacci numbers increase very rapidly, given below is the \(100^{th}\) fibonacci number.

$$ {Fib}({100}) = {354224848179261915075} $$

So you can see that for an input about \(10^9\) it would be impossible to represent int a 64-bit integer value and it would also take a very long time.

To bypass this bottleneck I needed to find a way to compute the \({Fib}(n) \ mod \ m \ \forall(m\gt1)\) without having to compute very large fibonacci numbers. To do that we need to first get to know *The Pisano Period*

### The Pisano Period

Pisano Period, \(\pi(m)\) is defined as the period which the fibonacci sequence modulo \(m\) repeats.

For example lets take \(m = 2\)

\(n\) | \(Fib(n)\) | \(Fib(n) \ mod \ 2\) |

0 | 1 | 1 |

1 | 1 | 1 |

2 | 2 | 0 |

3 | 3 | 1 |

4 | 5 | 1 |

5 | 8 | 0 |

6 | 13 | 1 |

7 | 21 | 1 |

8 | 34 | 0 |

As you can see there is a pattern of period 3.

So essentially for a given number $m$ there is a number $\pi(m)$ which is the period at which the fibonacci sequence repeats itself.

If you need to know more about the Pisano Period, feel free to google it!

So lets code the `get_pisano_period`

function

```
def get_pisano_period(m):
a = 0
b = 1
for i in range(0, m*m):
c = (a + b) % m
a = b
b = c
if a == 0 and b == 1:
return i + 1
```

### Applying to the Problem

So how does the Pisano Period helps us in finding the modulo of fibonnaci number. Let me demonstrate,

Let \(Fib(n) \ mod \ m\) be the value we want to find

Let \(p = \pi(m)\), where \(\pi(x)\) is the Pisano Period of \(x\)

Then we know that the \(Fib(x) \ mod \ m\) function repeats after every \(p\) iterations.

We can express that as \(n = a*p + b \ (a,b \in \mathbb{N})\). So we only need to compute the \(Fib(b) \ mod \ m\).

The python code for that is as follows,

```
def fib(n):
if n == 0:
return 1
n1 = 0
n2 = 1
for i in range(0, n):
t = n1 + n2
n1 = n2
n2 = t
return n2
def fibmod(n, m):
p = get_pisano_period(m)
b = n % p
return fib(n) % m
```

So I hope you guys understood this article, if you have any doubts or you can think of a quicker way to find the modulo of fibonacci numbers please feel free to comment on it!