# Count operations of the given type required to reduce N to 0

Given an integer n. The task is to count the number of operations required to reduce n to 0. In every operation, n can be updated as n = n – d where d is the smallest prime divisor of n.

Examples:

Input: n = 5
Output: 1
5 is the smallest prime divisor, thus it gets subtracted and n gets reduced to 0.

Input: n = 25
Output: 11
5 is the smallest prime divisor, thus it gets subtracted and n gets reduced to 20. Then 2 is the smallest divisor and so on.

Input: n = 4
Output: 2

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach:

1. When n is even then the smallest prime divisor of n will be 2 and subtracting 2 from n will again give an even integer i.e. gain 2 will be chosen as the smallest prime divisor and these steps will repeat until n gets reduced to 0.
2. When n is odd then the smallest prime divisor of n will also be odd and subtracting an odd integer from another odd integer will give an even integer as the result and then the result can be found out by repeating step 1 for the current even integer.
3. Thus, the task is to find the smallest divisor d, subtract it, n = n – d and print 1 + ((n – d) / 2).

Below is the implementation of the above approach:

## C++

 // C++ implementation of the approach  #include  using namespace std;     // Function to return the required   // number of operations  int countOperations (int n)  {      int i = 2;             // Finding the smallest divisor      while ((i * i) < n && (n % i))          i += 1;             if ((i * i) > n)          i = n;             // Return the count of operations      return (1 + (n - i)/2);  }     // Driver code  int main()  {      int n = 5;      cout << countOperations(n);  }     //This code is contributed by Shivi_Aggarwal

## Java

 // Java implementation of the approach  class GFG  {     // Function to return the required   // number of operations  static int countOperations (int n)  {      int i = 2;             // Finding the smallest divisor      while ((i * i) < n && (n % i) > 0)          i += 1;             if ((i * i) > n)          i = n;             // Return the count of operations      return (1 + (n - i) / 2);  }     // Driver code  public static void main(String[] args)  {      int n = 5;      System.out.println(countOperations(n));  }  }     // This code is contributed  // by Akanksha Rai

## Python3

 # Python3 implementation of the approach     # Function to return the required   # number of operations  def countOperations(n):      i = 2            # Finding the smallest divisor      while ((i * i) < n and (n % i)):          i += 1            if ((i * i) > n):          i = n             # Return the count of operations      return (1 + (n - i)//2)     # Driver code  n = 5 print(countOperations(n))

## C#

 // C# implementation of the approach  using System;  class GFG  {     // Function to return the required   // number of operations  static int countOperations (int n)  {      int i = 2;             // Finding the smallest divisor      while ((i * i) < n && (n % i) > 0)          i += 1;             if ((i * i) > n)          i = n;             // Return the count of operations      return (1 + (n - i) / 2);  }     // Driver code  static void Main()  {      int n = 5;      Console.WriteLine(countOperations(n));  }  }     // This code is contributed by mits

## PHP

  $n)   $i = $n;     # Return the count of operations   return 1 + floor(($n - $i) / 2);  }    // Driver code  $n = 5 ;  echo countOperations(\$n);      // This code is contributed by Ryuga  ?>

Output:

1


Time Complexity: Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.