Open In App

Number of times the largest perfect square number can be subtracted from N

Last Updated : 06 Apr, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

Given a number N. At every step, subtract the largest perfect square( ? N) from N. Repeat this step while N > 0. The task is to count the number of steps that can be performed. 

Examples: 

Input: N = 85 
Output:
First step, 85 – (9 * 9) = 4 
Second step 4 – (2 * 2) = 0

Input: N = 114 
Output:
First step, 114 – (10 * 10) = 14 
Second step 14 – (3 * 3) = 5 
Third step 5 – (2 * 2) = 1 
Fourth step 1 – (1 * 1) = 0 

Brute force approach:

The brute force approach to solve this problem involves repeatedly subtracting the largest perfect square less than or equal to N from N until N becomes zero, and counting the number of steps taken. To find the largest perfect square less than or equal to N, we iterate over the integers from sqrt(N) down to 1, and check if the square of the current integer is less than or equal to N. Once we have found the largest perfect square less than or equal to N, we subtract it from N and increment the number of steps taken. We repeat this process until N becomes zero, and then return the number of steps taken.

Implementation of the above approach:

C++




// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to return the count of steps
int countSteps(int n)
{
    int steps = 0;
    while (n > 0) {
        int i;
        for (i = sqrt(n); i >= 1; i--) {
            if (i*i <= n) {
                break;
            }
        }
        n -= i*i;
        steps++;
    }
    return steps;
}
 
 
// Driver code
int main()
{
    int n = 85;
    cout << countSteps(n);
 
    return 0;
}


Java




import java.lang.Math;
 
class Main
{
 
  // Function to return the count of steps
  static int countSteps(int n)
  {
    int steps = 0;
    while (n > 0) {
      int i = (int)Math.sqrt(n);
 
      // Find the largest perfect square less than or
      // equal to n
      while (i >= 1) {
        if (i * i <= n) {
          break;
        }
        i--;
      }
      // Subtract the largest perfect square from n
      // and increment steps
      n -= i * i;
      steps++;
    }
    return steps;
  }
 
  public static void main(String[] args)
  {
    // Driver code
    int n = 85;
    System.out.println(countSteps(n));
  }
}


Python3




import math
 
# Function to return the count of steps
 
 
def countSteps(n):
    steps = 0
    while n > 0:
        i = int(math.sqrt(n))
        # Find the largest perfect square less than or equal to n
        while i >= 1:
            if i*i <= n:
                break
            i -= 1
        # Subtract the largest perfect square from n and increment steps
        n -= i*i
        steps += 1
    return steps
 
 
# Driver code
n = 85
print(countSteps(n))


C#




// C# implementation of the approach
using System;
 
class GFG {
    // Function to return the count of steps
    static int countSteps(int n)
    {
        int steps = 0;
        while (n > 0) {
            int i;
            for (i = (int)Math.Sqrt(n); i >= 1; i--) {
                if (i * i <= n) {
                    break;
                }
            }
            n -= i * i;
            steps++;
        }
        return steps;
    }
 
    // Driver code
    static void Main()
    {
        int n = 85;
        Console.WriteLine(countSteps(n));
    }
}
// This code is contributed by user_dtewbxkn77n


Javascript




function countsteps(n){
  let steps = 0;
   
  while (n > 0){
    let i = Number.parseInt(Math.sqrt(n));
     
    while (i>=1){
      if (i*i <= n){
        break;
      }
      i--;
    }
    n -= i*i;
    steps++;
  }
  return steps;
}
 
let n = 85;
console.log(countsteps(n));


Output

2

Time Complexity: O(N * sqrt(N))

Space Complexity: O(1)

Approach: Iteratively subtract the largest perfect square (? N) from N while N > 0 and count the number of steps. 
Below is the implementation of the above approach:  

C++




// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to return the count of steps
int countSteps(int n)
{
 
    // Variable to store the count of steps
    int steps = 0;
 
    // Iterate while N > 0
    while (n) {
 
        // Get the largest perfect square
        // and subtract it from N
        int largest = sqrt(n);
        n -= (largest * largest);
 
        // Increment steps
        steps++;
    }
 
    // Return the required count
    return steps;
}
 
// Driver code
int main()
{
    int n = 85;
    cout << countSteps(n);
 
    return 0;
}


Java




// Java implementation of the approach
import java.lang.Math;
 
public class GfG{
 
    // Function to return the count of steps
    static int countSteps(int n)
    {
        // Variable to store the count of steps
        int steps = 0;
     
        // Iterate while N > 0
        while (n > 0) {
     
            // Get the largest perfect square
            // and subtract it from N
            int largest = (int)Math.sqrt(n);
            n -= (largest * largest);
     
            // Increment steps
            steps++;
        }
     
        // Return the required count
        return steps;
    }
 
     public static void main(String []args){
         
        int n = 85;
        System.out.println(countSteps(n));
     }
}
 
// This code is contributed by Rituraj Jain


Python3




# Python3 implementation of the approach
from math import sqrt
 
# Function to return the count of steps
def countSteps(n) :
 
    # Variable to store the count of steps
    steps = 0;
 
    # Iterate while N > 0
    while (n) :
 
        # Get the largest perfect square
        # and subtract it from N
        largest = int(sqrt(n));
        n -= (largest * largest);
 
        # Increment steps
        steps += 1;
 
    # Return the required count
    return steps;
     
# Driver code
if __name__ == "__main__" :
 
    n = 85;
    print(countSteps(n));
     
# This code is contributed by Ryuga


C#




// C# implementation of the approach
using System;
 
class GfG
{
 
    // Function to return the count of steps
    static int countSteps(int n)
    {
        // Variable to store the count of steps
        int steps = 0;
     
        // Iterate while N > 0
        while (n > 0)
        {
     
            // Get the largest perfect square
            // and subtract it from N
            int largest = (int)Math.Sqrt(n);
            n -= (largest * largest);
     
            // Increment steps
            steps++;
        }
     
        // Return the required count
        return steps;
    }
 
    // Driver code
    public static void Main()
    {
        int n = 85;
        Console.WriteLine(countSteps(n));
    }
}
 
// This code is contributed by Code_Mech.


PHP




<?php
// PHP implementation of the approach
 
// Function to return the count of steps
function countSteps($n)
{
 
    // Variable to store the count of steps
    $steps = 0;
 
    // Iterate while N > 0
    while ($n)
    {
 
        // Get the largest perfect square
        // and subtract it from N
        $largest = (int)sqrt($n);
        $n -= ($largest * $largest);
 
        // Increment steps
        $steps++;
    }
 
    // Return the required count
    return $steps;
}
 
// Driver code
$n = 85;
echo countSteps($n);
 
// This code is contributed
// by Akanksha Rai
?>


Javascript




<script>
 
// JavaScript implementation of the approach
 
// Function to return the count of steps
function countSteps(n)
{
     
    // Variable to store the count of steps
    let steps = 0;
 
    // Iterate while N > 0
    while (n)
    {
         
        // Get the largest perfect square
        // and subtract it from N
        let largest = Math.floor(Math.sqrt(n));
        n -= (largest * largest);
 
        // Increment steps
        steps++;
    }
 
    // Return the required count
    return steps;
}
 
// Driver code
 
let n = 85;
 
document.write(countSteps(n));
 
// This code is contributed by Manoj.
 
</script>


Output: 

2

 

Time Complexity: O(logn) because inbuilt sqrt function has been used

Auxiliary Space: O(1), since no extra space has been taken.



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads