The Fibonacci Sequence is a mathematical sequence where the first and second terms are 1, and each term after that is the sum of the two previous terms. More formally, if denotes the term of the Fibonacci Sequence, then , and for all integer .
The modulo (or ) operation is an operation represented by the symbol. The expression denotes the remainder when the positive integer is divided by the positive integer . For example, , because the remainder when is divided by is . The modulo operator is available in most programming languages using the operator %
- for example, the line int a = 7%2;
in C++ will set a
to be 1.
You have found yourself at the first house of a long street. There are a total of houses along this street, numbered to . You are trying to travel from the first house to the last house as fast as possible.
You can always walk from one house to an adjacent house (i.e. from house to house or house , if they exist). This takes one minute.
At each house, there is also a trampoline that allows you to travel a larger distance. In particular, at the house, there is a trampoline with strength . Using the trampoline also takes one minute, and from house , you can use the trampoline to jump either backwards to house (as long as ) or forwards to house (as long as ).
You have been able to reverse-engineer a pattern of the values of for all the houses:
for all ,
where represents the term in the Fibonacci Sequence and represents the modulo operation, as defined at the beginning of the problem.
For reference purposes, , , , , , , , and .
Please find the minimum number of minutes you need to travel from house to house .
NOTE FOR PYTHON USERS: If your program receives TLE (time limit exceeded), you should try submitting using the PyPy interpreter: when you are submitting your code, try using "PyPy 3" or "PyPy 2" as the language, instead of "Python 3" or "Python 2".
Input Specification
The input will consist of one integer, , the number of houses on the street.
Output Specification
Please output the minimum number of minutes you need to travel from house to house .
Constraints and Partial Marks
For of the available marks, .
For the remaining marks, .
Sample Input 1
9
Sample Output 1
3
Explanation for Sample Output 1
The first terms of the sequence are . To travel from house to house , the optimal pattern of moves is:
- Move : Jump from house to house . This is possible as .
- Move : Jump from house to house . This is possible as .
- Move : Walk from house to house . This is possible as .
Every move takes minute, so the output is 3
.
Sample Input 2
27
Sample Output 2
4
Explanation for Sample Output 2
One way to reach house in moves is as follows:
- Move : Jump from house to house . This is possible as .
- Move : Jump from house to house . This is possible as .
- Move : Walk backwards from house to house . This is possible as .
- Move : Jump from house to house . This is possible as .
Comments