Open In App

Iterated Logarithm log*(n)

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

Iterated Logarithm or Log*(n) is the number of times the logarithm function must be iteratively applied before the result is less than or equal to 1.

\log ^{*}n:=\begin{cases}0n\leq 1;\\1+\log ^{*}(\log n)n>1\end{cases}
 

Applications: It is used in the analysis of algorithms (Refer Wiki for details)

C++

// Recursive CPP program to find value of
// Iterated Logarithm
#include <bits/stdc++.h>
using namespace std;
 
int _log(double x, double base)
{
    return (int)(log(x) / log(base));
}
 
double recursiveLogStar(double n, double b)
{
    if (n > 1.0)
        return 1.0 + recursiveLogStar(_log(n, b), b);
    else
        return 0;
}
 
// Driver code
int main()
{
    int n = 100, base = 5;
    cout << "Log*(" << n << ") = "
         << recursiveLogStar(n, base) << "\n";
    return 0;
}

                    

Java

// Recursive Java program to
// find value of Iterated Logarithm
import java.io.*;
 
class GFG
{
static int _log(double x,
                double base)
{
    return (int)(Math.log(x) /
                 Math.log(base));
}
 
static double recursiveLogStar(double n,
                               double b)
{
    if (n > 1.0)
        return 1.0 +
               recursiveLogStar(_log(n,
                                 b), b);
    else
        return 0;
}
 
// Driver code
public static void main (String[] args)
{
    int n = 100, base = 5;
    System.out.println("Log*(" + n + ") = " +
                  recursiveLogStar(n, base));
}
}
 
// This code is contributed by jit_t

                    

Python3

# Recursive Python3 program to find value of
# Iterated Logarithm
import math
 
def _log(x, base):
 
    return (int)(math.log(x) / math.log(base))
 
def recursiveLogStar(n, b):
 
    if(n > 1.0):
        return 1.0 + recursiveLogStar(_log(n, b), b)
    else:
        return 0
 
 
# Driver code
if __name__=='__main__':
    n = 100
    base = 5
    print("Log*(", n, ") = ", recursiveLogStar(n, base))
 
# This code is contributed by
# Sanjit_Prasad

                    

C#

// Recursive C# program to
// find value of Iterated Logarithm
 
using System;
 
public class GFG{
static int _log(double x, double baset)
{
    return (int)(Math.Log(x) /
                Math.Log(baset));
}
 
static double recursiveLogStar(double n,
                            double b)
{
    if (n > 1.0)
        return 1.0 +
            recursiveLogStar(_log(n,
                                b), b);
    else
        return 0;
}
 
// Driver code
    static public void Main (){
     
    int n = 100, baset = 5;
    Console.WriteLine("Log*(" + n + ") = " +
                recursiveLogStar(n, baset));
}
}
 
// This code is contributed by ajit.

                    

PHP

<?php
// Recursive PhP program to find
// value of Iterated Logarithm
 
function _log($x, $base)
{
    return (int)(log($x) / log($base));
}
 
function recursiveLogStar($n, $b)
{
    if ($n > 1.0)
        return 1.0 +
               recursiveLogStar(_log($n,
                               $b), $b);
    else
        return 0;
}
 
// Driver code
$n = 100; $base = 5;
echo "Log*(" , $n , ")"," = ",
recursiveLogStar($n, $base), "\n";
 
// This code is contributed by ajit
?>

                    

Javascript

<script>
 
// Javascript program to
// find value of Iterated Logarithm
 
    function _log( x, base)
{
    return (Math.log(x) /
                 Math.log(base));
}
  
function recursiveLogStar(n, b)
{
    if (n > 1.0)
        return 1.0 +
               recursiveLogStar(_log(n,
                                 b), b);
    else
        return 0;
}
     
// Driver code
 
    let n = 100, base = 5;
    document.write("Log*(" + n + ") = " +
                  recursiveLogStar(n, base));
     
    // This code is contributed by sanjoy_62.
</script>

                    

Output : 

Log*(100) = 2

Time Complexity: O(logn)

Auxiliary Space: O(logn) due to recursive stack space
Iterative Implementation : 

C++

// Iterative CPP function to find value of
// Iterated Logarithm
int iterativeLogStar(double n, double b)
{
    int count = 0;
    while (n >= 1) {
        n = _log(n, b);
        count++;
    }
    return count;
}

                    

Java

// Iterative Java function to find value of
// Iterated Logarithm
public static int iterativeLogStar(double n, double b)
{
    int count = 0;
    while (n >= 1) {
        n = _log(n, b);
        count++;
    }
    return count;
}
 
// This code is contributed by pratham76

                    

Python3

# Iterative Python function to find value of
# Iterated Logarithm
 
 
def iterativeLogStar(n, b):
 
    count = 0
    while(n >= 1):
        n = _log(n, b)
        count = count + 1
 
    return count
 
# This code is contributed by
# Sanjit_Prasad

                    

C#

// Iterative C# function to find value of
// Iterated Logarithm
static int iterativeLogStar(double n, double b)
{
    int count = 0;
    while (n >= 1)
    {
        n = _log(n, b);
        count++;
    }
    return count;
}
 
// This code is contributed by rutvik_56

                    

Javascript

<script>
 
// Iterative javascript function to find
// value of Iterated Logarithm
function iterativeLogStar(n, b)
{
    var count = 0;
    while (n >= 1)
    {
        n = _log(n, b);
        count++;
    }
    return count;
}
 
// This code is contributed by 29AjayKumar
 
</script>

                    

Time Complexity: O(logn)

Auxiliary Space: O(1)



 



Last Updated : 19 Aug, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads