 Open in App
Not now

# Check if a M-th fibonacci number divides N-th fibonacci number

• Difficulty Level : Easy
• Last Updated : 27 Mar, 2023

Given two numbers M and N, the task is to check if the M-th and N-th Fibonacci numbers perfectly divide each other or not.
Examples:

Input: M = 3, N = 6
Output: Yes
F(3) = 2, F(6) = 8 and F(6) % F(3) = 0
Input: M = 2, N = 9
Output:  Yes

A naive approach will be to find the N-th and M-th Fibonacci numbers and check if they are perfectly divisible or not.
An efficient approach is to use the Fibonacci property to determine the result. If m perfectly divides n, then Fm also perfectly divides Fn, else it does not.
Exception: When N is 2, it is always possible as Fibo2 is 1, which divides every other Fibonacci number.
Below is the implementation of the above approach:

## C++

 `// C++ program to check if``// M-th fibonacci divides N-th fibonacci``#include ``using` `namespace` `std;` `void` `check(``int` `n, ``int` `m)``{``    ``// exceptional case for F(2)``    ``if` `(n == 2 || m == 2 || n % m == 0) {``        ``cout << ``"Yes"` `<< endl;``    ``}``    ``// if none of the above cases,``    ``// hence not divisible``    ``else` `{``        ``cout << ``"No"` `<< endl;``    ``}``}` `// Driver Code``int` `main()``{``    ``int` `m = 3, n = 9;``    ``check(n, m);` `    ``return` `0;``}`

## Java

 `// Java program to check``// if M-th fibonacci``// divides N-th fibonacci``import` `java.io.*;` `class` `GFG``{``static` `void` `check(``int` `n, ``int` `m)``{``    ``// exceptional case for F(2)``    ``if` `(n == ``2` `|| m == ``2` `||``        ``n % m == ``0``)``    ``{``        ``System.out.println( ``"Yes"``);``    ``}``    ` `    ``// if none of the above cases,``    ``// hence not divisible``    ``else``    ``{``        ``System.out.println( ``"No"``);``    ``}``}` `// Driver Code``public` `static` `void` `main (String[] args)``{``    ``int` `m = ``3``, n = ``9``;``    ``check(n, m);``}``}` `// This code is contributed``// by anuj_67.`

## Python 3

 `# Python 3 program to``# check if M-th fibonacci``# divides N-th fibonacci` `def` `check(n, m):` `    ``# exceptional case for F(2)``    ``if` `(n ``=``=` `2` `or` `m ``=``=` `2` `or``        ``n ``%` `m ``=``=` `0``) :``        ``print``( ``"Yes"` `)``    ` `    ``# if none of the above``    ``# cases, hence not divisible``    ``else` `:``        ``print``( ``"No"` `)` `# Driver Code``m ``=` `3``n ``=` `9``check(n, m)` `# This code is contributed``# by Smitha`

## C#

 `// C# program to check``// if M-th fibonacci``// divides N-th fibonacci``using` `System;` `class` `GFG``{``static` `void` `check(``int` `n, ``int` `m)``{``    ``// exceptional case for F(2)``    ``if` `(n == 2 || m == 2 ||``        ``n % m == 0)``    ``{``         ``Console.WriteLine( ``"Yes"``);``    ``}``    ` `    ``// if none of the above cases,``    ``// hence not divisible``    ``else``    ``{``        ``Console.WriteLine( ``"No"``);``    ``}``}` `// Driver Code``public` `static` `void` `Main ()``{``    ``int` `m = 3, n = 9;``    ``check(n, m);``}``}` `// This code is contributed``// by anuj_67.`

## PHP

 ``

## Javascript

 ``

Output:

`Yes`

Time Complexity: O(1).
Auxiliary Space: O(1) as using constant variables

Approach 2: Dynamic Programming:

The Approach first initializes two variables “a” and “b” with values 0 and 1 respectively, and then uses a for loop to calculate the N-th Fibonacci number by adding the previous two numbers in the sequence. It then stores this value in the variable “n_fib”.

Next, the program initializes “a” and “b” again with values 0 and 1 respectively, and uses another for loop to calculate the M-th Fibonacci number in the same way. It stores this value in the variable “m_fib”.

Here is the code:

## C++

 `// C++ program to check if``// M-th fibonacci divides N-th fibonacci``#include ``using` `namespace` `std;` `void` `check(``int` `n, ``int` `m)``{``    ``int` `a = 0, b = 1, c;``    ``for` `(``int` `i = 2; i <= n; i++) {``        ``c = a + b;``        ``a = b;``        ``b = c;``    ``}``    ``int` `n_fib = b;``    ` `    ``a = 0, b = 1;``    ``for` `(``int` `i = 2; i <= m; i++) {``        ``c = a + b;``        ``a = b;``        ``b = c;``    ``}``    ``int` `m_fib = b;``    ` `    ``// exceptional case for F(2)``    ``if` `(n == 2 || m == 2 || n_fib % m_fib == 0) {``        ``cout << ``"Yes"` `<< endl;``    ``}``    ``// if none of the above cases,``    ``// hence not divisible``    ``else` `{``        ``cout << ``"No"` `<< endl;``    ``}``}` `// Driver Code``int` `main()``{``    ``int` `m = 3, n = 6;``    ``check(n, m);` `    ``return` `0;``}`

## Java

 `import` `java.util.*;` `public` `class` `Main {``    ``public` `static` `void` `main(String[] args) {``        ``int` `m = ``3``, n = ``6``;``        ``check(n, m);``    ``}` `    ``public` `static` `void` `check(``int` `n, ``int` `m) {``        ``int` `a = ``0``, b = ``1``, c;``        ``for` `(``int` `i = ``2``; i <= n; i++) {``            ``c = a + b;``            ``a = b;``            ``b = c;``        ``}``        ``int` `n_fib = b;` `        ``a = ``0``;``        ``b = ``1``;``        ``for` `(``int` `i = ``2``; i <= m; i++) {``            ``c = a + b;``            ``a = b;``            ``b = c;``        ``}``        ``int` `m_fib = b;` `        ``// exceptional case for F(2)``        ``if` `(n == ``2` `|| m == ``2` `|| n_fib % m_fib == ``0``) {``            ``System.out.println(``"Yes"``);``        ``} ``else` `{``            ``System.out.println(``"No"``);``        ``}``    ``}``}`

Output

`Yes`

Time Complexity: O(n+m), where n and m are the indices of the Fibonacci numbers to be checked.
Auxiliary Space: O(1) as using constant variables

My Personal Notes arrow_drop_up