Open In App

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

Improve
Improve
Like Article
Like
Save
Share
Report

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 <bits/stdc++.h>
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




<?php
// PHP program to check
// if M-th fibonacci
// divides N-th fibonacci
 
function check($n, $m)
{
    // exceptional case for F(2)
    if ($n == 2 || $m == 2 ||
        $n % $m == 0)
    {
        echo "Yes" , "\n";
    }
     
    // if none of the above cases,
    // hence not divisible
    else
    {
        echo "No" ," \n";
    }
}
 
// Driver Code
$m = 3; $n = 9;
check($n, $m);
 
// This code is contributed
// by anuj_67.
?>


Javascript




<script>
 
// Javascript program to check if
// M-th fibonacci divides N-th fibonacci
 
function check(n, m)
{
    // exceptional case for F(2)
    if (n == 2 || m == 2 || n % m == 0) {
        document.write("Yes" + "<br>");
    }
    // if none of the above cases,
    // hence not divisible
    else {
        document.write("No" + "<br>");
    }
}
 
// Driver Code
  
    let m = 3, n = 9;
    check(n, m);
 
// This code is contributed by Mayank Tyagi
 
</script>


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 <bits/stdc++.h>
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");
        }
    }
}


Python3




# Python program to check if
# M-th fibonacci divides N-th fibonacci
def check(n, m):
    a, b, c = 0, 1, 0
    for i in range(2, n + 1):
        c = a + b
        a = b
        b = c
    n_fib = b
 
    a, b = 0, 1
    for i in range(2, m + 1):
        c = a + b
        a = b
        b = c
    m_fib = b
 
    # exceptional case for F(2)
    if n == 2 or m == 2 or n_fib % m_fib == 0:
        print("Yes")
    # if none of the above cases,
    # hence not divisible
    else:
        print("No")
 
# Driver Code
m = 3
n = 6
check(n, m)
 
# This code is contributed by Susobhan Akhuli


C#




using System;
 
public class GFG {
    public static void Main(string[] args) {
        int m = 3, n = 6;
        Check(n, m);
    }
    // check Function dynamic programming approach
    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) {
            Console.WriteLine("Yes");
        } else {
            Console.WriteLine("No");
        }
    }
}


Javascript




function check(n, m) {
    let a = 0, b = 1, c;
    for (let i = 2; i <= n; i++) {
        c = a + b;
        a = b;
        b = c;
    }
    let nFib = b;
 
    a = 0;
    b = 1;
    for (let i = 2; i <= m; i++) {
        c = a + b;
        a = b;
        b = c;
    }
    let mFib = b;
 
    // exceptional case for F(2)
    if (n === 2 || m === 2 || nFib % mFib === 0) {
        console.log("Yes");
    } else {
        console.log("No");
    }
}
 
let n = 6, m = 3;
check(n, m);


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 only constant variables.
 



Last Updated : 20 Apr, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads