Related Articles

# Logarithm tricks for Competitive Programming

• Difficulty Level : Medium
• Last Updated : 17 Jun, 2021

Logarithm: is the inverse function of the exponentiation which means the logarithm value of a given number x is the exponent to another number.

Below are some tricks using Logarithmic function which can be handy in competitive programming.

### Checking if a number is a power of two or not:

Given an integer N, the task is to check that if the number N is the power of 2.

Examples:

Input: N = 8
Output: Yes

Input: N = 6
Output: No

Approach: A simple method for this is to simply take the log of the number on base 2, if you get an integer then the number is the power of 2.

Below is the implementation of the above approach:

## C++

 // C++ implementation to check that// a integer is a power of Two #include  using namespace std; // Function to check if the number// is a power of twobool isPowerOfTwo(int n){    return (ceil(log2(n)) == floor(log2(n)));} // Driver Codeint main(){    int N = 8;     if (isPowerOfTwo(N)) {        cout << "Yes";    }    else {        cout << "No";    }}

## C

 // C implementation to check that// a integer is a power of Two#include #include  // Function to check if the number// is a power of two_Bool isPowerOfTwo(int n){    return (ceil(log2(n)) == floor(log2(n)));} // Driver Codeint main(){    int N = 8;     if (isPowerOfTwo(N))    {        printf("Yes");    }    else    {        printf("No");    }} // This code is contributed by vikas_g

## Java

 // Java implementation to check that// a integer is a power of Twoimport java.lang.Math; class GFG{     // Function to check if the number// is a power of twopublic static boolean isPowerOfTwo(int n){    return(Math.ceil(Math.log(n) /                     Math.log(2)) ==          Math.floor(Math.log(n) /                     Math.log(2)));}     // Driver Codepublic static void main(String[] args){    int N = 8;     if (isPowerOfTwo(N))    {        System.out.println("Yes");    }    else    {        System.out.println("No");    }}} // This code is contributed by divyeshrabadiya07

## Python3

 # Python3 implementation to check that# a integer is a power of twoimport math # Function to check if the number# is a power of two            def isPowerOfTwo(n):         return(math.ceil(math.log(n) //                     math.log(2)) ==           math.floor(math.log(n) //                      math.log(2)));                     # Driver codeif __name__=='__main__':         N = 8         if isPowerOfTwo(N):        print('Yes')    else:        print('No') # This code is contributed by rutvik_56

## C#

 // C# implementation to check that// a integer is a power of Twousing System; class GFG{     // Function to check if the number// is a power of twopublic static bool isPowerOfTwo(int n){    return(Math.Ceiling(Math.Log(n) /                        Math.Log(2)) ==             Math.Floor(Math.Log(n) /                        Math.Log(2)));}     // Driver Codepublic static void Main(String[] args){    int N = 8;     if (isPowerOfTwo(N))    {        Console.WriteLine("Yes");    }    else    {        Console.WriteLine("No");    }}} // This code is contributed by 29AjayKumar

## Javascript


Output:
Yes

### Kth root of a Number

Given two integers N and K, the task is to find the Kth root of the number N.

Examples:

Input: N = 8, K = 3
Output: 2

Input: N = 32, K = 5
Output:

Approach: A simple solution is to use logarithmic function to find the Kth root of the number. Below is the illustration of the approach:

then,
Applying on both side
=>
=>
=>

Below is the implementation of the above approach:

## C++

 // C++ implementation to find// Kth root of the number #include  using namespace std; // Function to find the// Kth root of the numberdouble kthRoot(double n, int k){    return pow(k,               (1.0 / k)                   * (log(n)                      / log(k)));} // Driver Codeint main(){    double N = 8.0;    int K = 3;     cout << kthRoot(N, K);     return 0;}

## Java

 // Java implementation to find// Kth root of the numberclass GFG{ // Function to find the// Kth root of the numberstatic double kthRoot(double n, int k){    return Math.pow(k, (1.0 / k) *                    (Math.log(n) / Math.log(k)));} // Driver Codepublic static void main(String[] args){    double N = 8.0;    int K = 3;     System.out.print(kthRoot(N, K));}} // This code is contributed by shivanisinghss2110

## Python3

 # Python3 implementation to find# Kth root of the numberimport math # Function to find the# Kth root of the numberdef kth_root(n, k):         return(pow(k, ((1.0 / k) * (math.log(n) /                                math.log(k))))) # Driver codeif __name__=="__main__":         n = 8.0    k = 3         print(round(kth_root(n, k))) # This code is contributed by dipesh99kumar

## C#

 // C# implementation to find// Kth root of the numberusing System; // Function to find the// Kth root of the numberclass GFG{     static double kthRoot(double n, int k){    return Math.Pow(k, (1.0 / k) *                   (Math.Log(n) / Math.Log(k)));} // Driver Codepublic static void Main(){    double N = 8.0;    int K = 3;     Console.Write(kthRoot(N, K));}} // This code is contributed by vikas_g

## Javascript


Output:
2

### Count digits in a Number:

Given an integer N, the task is to count the digits in a number N.

Examples:

Input: N = 243
Output: 3

Input: N = 1000
Output:

Approach: The idea is to find the logarithm of the number base 10 to count the number of digits.

Below is the implementation of the above approach:

## C++

 // C++ implementation count the// number of digits in a number #include  using namespace std; // Function to count the// number of digits in a numberint countDigit(long long n){    return floor(log10(n) + 1);} // Driver Codeint main(){    double N = 80;     cout << countDigit(N);     return 0;}

## C

 // C implementation count the// number of digits in a number#include #include  // Function to count the// number of digits in a numberint countDigit(long long n){    return (floor(log10(n) + 1));} // Driver Codeint main(){    double N = 80;     printf("%d", countDigit(N));     return 0;} // This code is contributed by vikas_g

## Java

 // Java implementation to count the// number of digits in a numberclass GFG{ // Function to count the// number of digits in a numberstatic int countDigit(double n){    return((int)Math.floor(Math.log10(n) + 1)); } // Driver Codepublic static void main(String[] args){    double N = 80;         System.out.println(countDigit(N));}} // This code is contributed by vikas_g

## Python3

 # Python3 implementation count the# number of digits in a numberimport math # Function to count the# number of digits in a numberdef countDigit(n):         return(math.floor(math.log10(n) + 1)) # Driver codeif __name__=="__main__":         n = 80     print(countDigit(n)) # This code is contributed by dipesh99kumar

## C#

 // C# implementation count the// number of digits in a numberusing System; // Function to count the// number of digits in a numberclass GFG{     static int countDigit(double n){    return((int)Math.Floor(Math.Log10(n) + 1));} // Driver Codepublic static void Main(){    double N = 80;         Console.Write(countDigit(N));}} // This code is contributed by vikas_g

## Javascript


Output:
2

### Check if N is a power of K or not:

Given two integers N and K, the task is to check if Y is power of X or not.

Examples:

Input: N = 8, K = 2
Output: Yes

Input: N = 27, K = 3
Output: Yes

Approach: The idea is to take log of N in base K. If it turns out to be an integer, then N is a power of K.

Below is the implementation of the above approach:

## C++

 // C++ implementation to check if// the number is power of K #include  using namespace std; // Function to check if// the number is power of Kbool isPower(int N, int K){    // logarithm function to    // calculate value    int res1 = log(N) / log(K);    double res2 = log(N) / log(K);     // compare to the result1    // or result2 both are equal    return (res1 == res2);} // Driver Codeint main(){    int N = 8;    int K = 2;     if (isPower(N, K)) {        cout << "Yes";    }    else {        cout << "No";    }     return 0;}

## C

 // C implementation to check if// the number is power of K#include #include  // Function to check if// the number is power of K_Bool isPower(int N, int K){         // Logarithm function to    // calculate value    int res1 = log(N) / log(K);    double res2 = log(N) / log(K);     // Compare to the result1    // or result2 both are equal    return (res1 == res2);} // Driver Codeint main(){    int N = 8;    int K = 2;     if (isPower(N, K))    {        printf("Yes");    }    else    {        printf("No");    }    return 0;} // This code is contributed by vikas_g

## Java

 // Java implementation to check if// the number is power of Kclass GFG{ // Function to check if// the number is power of Kstatic boolean isPower(int N, int K){         // Logarithm function to    // calculate value    int res1 = (int)(Math.log(N) / Math.log(K));    double res2 = Math.log(N) / Math.log(K);     // Compare to the result1    // or result2 both are equal    return (res1 == res2);} // Driver Codepublic static void main(String[] args){    int N = 8;    int K = 2;     if (isPower(N, K))    {        System.out.println("Yes");    }    else    {        System.out.println("No");    }}} // This code is contributed by vikas_g

## Python3

 # Python3 implementation to check if a# number is a power of the other numberfrom math import log # Function to check if# the number is power of Kdef isPower(n, k):         # Logarithm function to    # calculate value    res1 = int(log(n) / log(k))    res2 = log(n) / log(k)         # Compare to the result1    # or result2 both are equal    return(res1 == res2) # Driver codeif __name__=="__main__":         n = 8    k = 2         if (isPower(n, k)):        print("Yes")    else:        print("No") # This code is contributed by dipesh99kumar

## C#

 // C# implementation to check if// the number is power of Kusing System; // Function to count the// number of digits in a numberclass GFG{     static bool isPower(int N, int K){         // Logarithm function to    // calculate value    int res1 = (int)(Math.Log(N) / Math.Log(K));    double res2 = Math.Log(N) / Math.Log(K);     // Compare to the result1    // or result2 both are equal    return (res1 == res2);} // Driver Codepublic static void Main(){    int N = 8;    int K = 2;     if (isPower(N, K))    {        Console.Write("Yes");    }    else    {        Console.Write("No");    }}} // This code is contributed by vikas_g

## Javascript


Output:
Yes

### To find the power of K greater than equal to and less than equal to N:

Given two integers N and K, the task is to find the power of K greater than equal to and less than equal to N.

Examples:

Input: N = 7, K = 2
Output: 4 8

Input: N = 18, K = 3
Output: 9 27

Approach: The idea is to find the floor value of the log K value of the given integer N, Then compute the Kth power of this number to compute the previous and next Kth power.

Below is the implementation of the above approach:

## C++

 // C++ implementation to find the// previous and next power of K #include  using namespace std; // Function to return the highest power// of k less than or equal to nint prevPowerofK(int n, int k){    int p = (int)(log(n) / log(k));    return (int)pow(k, p);} // Function to return the smallest power// of k greater than or equal to nint nextPowerOfK(int n, int k){    return prevPowerofK(n, k) * k;} // Driver Codeint main(){    int N = 7;    int K = 2;     cout << prevPowerofK(N, K) << " ";     cout << nextPowerOfK(N, K) << endl;    return 0;}

## C

 // C implementation to find the// previous and next power of K#include #include  // Function to return the highest power// of k less than or equal to nint prevPowerofK(int n, int k){    int p = (int)(log(n) / log(k));    return (int)pow(k, p);} // Function to return the smallest power// of k greater than or equal to nint nextPowerOfK(int n, int k){    return prevPowerofK(n, k) * k;} // Driver Codeint main(){    int N = 7;    int K = 2;     printf("%d ", prevPowerofK(N, K));    printf("%d\n", nextPowerOfK(N, K));         return 0;} // This code is contributed by vikas_g

## Java

 // Java implementation to find the// previous and next power of Kclass GFG{ // Function to return the highest power// of k less than or equal to nstatic int prevPowerofK(int n, int k){    int p = (int)(Math.log(n) / Math.log(k));    return (int)Math.pow(k, p);} // Function to return the smallest power// of k greater than or equal to nstatic int nextPowerOfK(int n, int k){    return prevPowerofK(n, k) * k;} // Driver Codepublic static void main(String[] args){    int N = 7;    int K = 2;         System.out.print(prevPowerofK(N, K) + " ");    System.out.println(nextPowerOfK(N, K));}} // This code is contributed by vikas_g

## Python3

 # Python3 implementation to find the# previous and next power of Kfrom math import log # Function to return the highest power# of k less than or equal to ndef prevPowerofK(n, k):         p = (int)(log(n) / log(k));    return pow(k, p); # Function to return the smallest power# of k greater than or equal to ndef nextPowerOfK(n, k):         return prevPowerofK(n, k) * k; # Driver Codeif __name__=="__main__":         N = 7    K = 2         print(prevPowerofK(N, K), end = " ")    print(nextPowerOfK(N, K)) # This code is contributed by dipesh99kumar

## C#

 // C# implementation to find the// previous and next power of Kusing System; // Function to count the// number of digits in a numberclass GFG{     // Function to return the highest power// of k less than or equal to nstatic int prevPowerofK(int n, int k){    int p = (int)(Math.Log(n) / Math.Log(k));    return (int)Math.Pow(k, p);} // Function to return the smallest power// of k greater than or equal to nstatic int nextPowerOfK(int n, int k){    return prevPowerofK(n, k) * k; } // Driver Codepublic static void Main(){    int N = 7;    int K = 2;         Console.Write(prevPowerofK(N, K) + " ");    Console.Write(nextPowerOfK(N, K));}} // This code is contributed by vikas_g

## Javascript


Output:
4 8

### To Find the position of rightmost set bit:

Given an integer N, the task is to find the position of the rightmost set bit.

Examples:

Input: N = 7
Output: 1

Input: N = 8
Output:

Approach:

• Take two’s complement of the given no as all bits are reverted except the first ‘1’ from right to left (0111)
• Do a bit-wise & with original no, this will return no with the required one only (0100)
• Take the log2 of the no, you will get (position – 1) (2)

Below is the implementation of the above approach:

## C++

 // C++ implementation to find the// rightmost set bit #include  using namespace std; // Function to find the rightmost// bit set of the integer Nunsigned int getFirstSetBitPos(int n){    return log2(n & -n) + 1;} // Driver Codeint main(){    int N = 8;     cout << getFirstSetBitPos(N);    return 0;}

## C

 // C implementation to find the// rightmost set bit#include #include  // Function to find the rightmost// bit set of the integer Nunsigned int getFirstSetBitPos(int n){    return log2(n & -n) + 1;} // Driver Codeint main(){    int N = 8;     printf("%d", getFirstSetBitPos(N));    return 0;} // This code is contributed by vikas_g

## Java

 // Java implementation to find the// rightmost set bitclass GFG{ // Function to find the rightmost// bit set of the integer Nstatic int getFirstSetBitPos(int n){    return (int)(Math.log(n & -n) /                 Math.log(2)) + 1;} // Driver Codepublic static void main(String[] args){    int N = 8;     System.out.println(getFirstSetBitPos(N));}} // This code is contributed by vikas_g

## Python3

 # Python3 implementation to find the# rightmost set bitimport math # Function to find the rightmost# bit set of the integer Ndef getFirstSetBitPos(n):     return math.log2(n & -n) + 1; # Driver Codeif __name__=="__main__":         N = 8     print(int(getFirstSetBitPos(N))) # This code is contributed by dipesh99kumar

## C#

 // C# implementation to find the// rightmost set bitusing System; class GFG{ // Function to find the rightmost// bit set of the integer Nstatic int getFirstSetBitPos(int n){    return (int)(Math.Log(n & -n) /                 Math.Log(2)) + 1;} // Driver Codepublic static void Main(){    int N = 8;     Console.Write(getFirstSetBitPos(N));}} // This code is contributed by vikas_g

## Javascript


Output:
4

My Personal Notes arrow_drop_up