GeeksforGeeks App
Open App
Browser
Continue

# Program to compute log a to any base b (logb a)

Given two integers a and b, the task is to find the log of a to any base b, i.e. logb a.
Examples:

Input: a = 3, b = 2
Output: 1

Input: a = 256, b = 4
Output: 4

### Using inbuilt log2 function

1. Find the log of a to the base 2 with the help of log2() method

2. Find the log of b to the base 2 with the help of log2() method

3. Divide the computed log a from the log b to get the logb a, i.e,

Below is the implementation of the above approach

## C++

 // C++ program to find log(a) on any base b#include using namespace std; int log_a_to_base_b(int a, int b){    return log2(a) / log2(b);} // Driver codeint main(){    int a = 3;    int b = 2;    cout << log_a_to_base_b(a, b) << endl;     a = 256;    b = 4;    cout << log_a_to_base_b(a, b) << endl;     return 0;} // This code is contributed by shubhamsingh10, yousefonweb

## C

 // C program to find log(a) on any base b #include #include  int log_a_to_base_b(int a, int b){    return log2(a) / log2(b);} // Driver codeint main(){    int a = 3;    int b = 2;    printf("%d\n",           log_a_to_base_b(a, b));     a = 256;    b = 4;    printf("%d\n",           log_a_to_base_b(a, b));     return 0;}

## Java

 // Java program to find log(a) on any base bclass GFG{         static int log_a_to_base_b(int a, int b)    {        return (int)(Math.log(a) / Math.log(b));    }         // Driver code    public static void main (String[] args)    {        int a = 3;        int b = 2;        System.out.println(log_a_to_base_b(a, b));             a = 256;        b = 4;        System.out.println(log_a_to_base_b(a, b));    }} // This code is contributed by AnkitRai01

## Python3

 # Python3 program to find log(a) on any base bfrom math import log2 def log_a_to_base_b(a, b) :    return log2(a) // log2(b); # Driver codeif __name__ == "__main__" :         a = 3;    b = 2;    print(log_a_to_base_b(a, b));     a = 256;    b = 4;    print(log_a_to_base_b(a, b)); # This code is contributed by AnkitRai01

## C#

 // C# program to find log(a) on any base b using System; public class GFG{         static int log_a_to_base_b(int a, int b)    {        return (int)(Math.Log(a) / Math.Log(b));    }         // Driver code    public static void Main()    {        int a = 3;        int b = 2;        Console.WriteLine(log_a_to_base_b(a, b));             a = 256;        b = 4;        Console.WriteLine(log_a_to_base_b(a, b));    }} // This code is contributed by AnkitRai01

## Javascript

 

Output:

1
4

Time Complexity: O(logba)
Auxiliary Space: O(1)

### Using Recursion

1. Recursively divide a by b till a is greater than b.

2. Count the number of times the divide is possible. This is the log of a to the base b, i.e. logb a

Below is the implementation of the above approach

## C++

 // C++ program to find log(a) on// any base b using Recursion#include using namespace std; // Recursive function to compute// log a to the base bint log_a_to_base_b(int a, int b){    return (a > b - 1)            ? 1 + log_a_to_base_b(a / b, b)            : 0;} // Driver codeint main(){    int a = 3;    int b = 2;    cout << log_a_to_base_b(a, b) << endl;     a = 256;    b = 4;    cout << log_a_to_base_b(a, b) << endl;     return 0;} // This code is contributed by shubhamsingh10

## C

 // C program to find log(a) on// any base b using Recursion #include  // Recursive function to compute// log a to the base bint log_a_to_base_b(int a, int b){    return (a > b - 1)               ? 1 + log_a_to_base_b(a / b, b)               : 0;} // Driver codeint main(){    int a = 3;    int b = 2;    printf("%d\n",           log_a_to_base_b(a, b));     a = 256;    b = 4;    printf("%d\n",           log_a_to_base_b(a, b));     return 0;}

## Java

 // Java program to find log(a) on// any base b using Recursionclass GFG{         // Recursive function to compute    // log a to the base b    static int log_a_to_base_b(int a, int b)    {        int rslt = (a > b - 1)? 1 + log_a_to_base_b(a / b, b): 0;        return rslt;    }         // Driver code    public static void main (String[] args)    {        int a = 3;        int b = 2;        System.out.println(log_a_to_base_b(a, b));             a = 256;        b = 4;        System.out.println(log_a_to_base_b(a, b));    }} // This code is contributed by AnkitRai01

## Python3

 # Python3 program to find log(a) on# any base b using Recursion # Recursive function to compute# log a to the base bdef log_a_to_base_b(a, b) :     rslt = (1 + log_a_to_base_b(a // b, b)) if (a > (b - 1)) else 0;                 return rslt;     # Driver codeif __name__ == "__main__" :     a = 3;    b = 2;    print(log_a_to_base_b(a, b));     a = 256;    b = 4;    print(log_a_to_base_b(a, b)); # This code is contributed by AnkitRai01

## C#

 // C# program to find log(a) on// any base b using Recursionusing System; class GFG{         // Recursive function to compute    // log a to the base b    static int log_a_to_base_b(int a, int b)    {        int rslt = (a > b - 1)? 1 + log_a_to_base_b(a / b, b): 0;        return rslt;    }         // Driver code    public static void Main()    {        int a = 3;        int b = 2;        Console.WriteLine(log_a_to_base_b(a, b));             a = 256;        b = 4;        Console.WriteLine(log_a_to_base_b(a, b));    }} // This code is contributed by Yash_R

## Javascript

 

Output

1
4

Time Complexity: O(logba)
Auxiliary Space: O(logba) Space required for recursive call stack

Approach:

The approach is to repeatedly divide the given number ‘a’ by the base ‘b’ until ‘a’ becomes less than or equal to 1. In each division, we increment the answer by 1. Finally, we return the answer which represents the logarithm of ‘a’ to the base ‘b’.

• Initialize a variable ‘ans’ to 0.
• Repeat the following steps until ‘a’ becomes less than or equal to 1:
a. Divide ‘a’ by ‘b’.
b. Increment ‘ans’ by 1.
• Return ‘ans’ as the result.

## C++

 #include using namespace std; int log_a_to_base_b(int a, int b){    int ans = 0;    while (a > 1) {        a /= b;        ans++;    }    return ans;} // Driver codeint main(){    int a = 3;    int b = 2;    cout << log_a_to_base_b(a, b) << endl;     a = 256;    b = 4;    cout << log_a_to_base_b(a, b) << endl;     return 0;}

Output

1
4


Time Complexity: O(log a), as in each iteration, ‘a’ is divided by ‘b’.
Space Complexity:  O(1), as only a constant amount of extra space is required for storing the ‘ans’ variable.

My Personal Notes arrow_drop_up