# Find the largest good number in the divisors of given number N

Last Updated : 23 Jul, 2022

Given a number N. The task is to find the largest good number among the divisors of a given number N. A number X is defined as the good number if there is no such positive integer a > 1, such that a^2 is a divisor of X.

Examples:

Input: N = 10
Output: 10
In 1, 2, 5, 10.
10 is the largest good number

Input: N = 12
Output: 6
In 1, 2, 3, 4, 6, 12.
6 is the largest good number

Approach: Find all prime divisors of N. Assume they are p1, p2, …, pk (in O(sqrt(n)) time complexity). If the answer is a, then we know that for each 1 <= I <= k, obviously, a is not divisible by pi^2 (and all greater powers of pi). So a <= p1 Ã— p2 Ã—… Ã— pk. And we know that p1 Ã— p2 Ã— … Ã— pk is itself a good number. So, the answer is p1 Ã— p2 Ã—…Ã— pk.

Below is the implementation of the above approach:

## C++

 // CPP program to find the largest, good // number in the divisors of given number N. #include using namespace std;   // function to return distinct prime factors vector PrimeFactors(int n) {     // to store distinct prime factors     vector v;       int x = n;       // run a loop upto sqrt(n)     for (int i = 2; i * i <= n; i++) {         if (x % i == 0) {               // place this prime factor in vector             v.push_back(i);             while (x % i == 0)                 x /= i;         }     }       // This condition is to handle the case when n     // is a prime number greater than 1     if (x > 1)         v.push_back(x);       return v; }   // function that returns good number int GoodNumber(int n) {     // distinct prime factors     vector v = PrimeFactors(n);       // to store answer     int ans = 1;       // product of all distinct prime     // factors is required answer     for (int i = 0; i < v.size(); i++)         ans *= v[i];       return ans; }   // Driver code int main() {     int n = 12;       // function call     cout << GoodNumber(n);       return 0; }

## Java

 // Java program to find the largest, good // number in the divisors of given number N.   import java.util.*;   class GFG {     // function to return distinct prime factors       static Vector PrimeFactors(int n)     {           // to store distinct prime factors         Vector v = new Vector();         int x = n;           // run a loop upto sqrt(n)         for (int i = 2; i * i <= n; i++) {             if (x % i == 0) {                   // place this prime factor in vector                 v.add(i);                 while (x % i == 0)                     x /= i;             }         }           // This condition is to handle the case when n         // is a prime number greater than 1         if (x > 1)             v.add(x);           return v;     }       // function that returns good number     static int GoodNumber(int n)     {         // distinct prime factors         Vector v = new Vector(PrimeFactors(n));           // to store answer         int ans = 1;           // product of all distinct prime         // factors is required answer         for (int i = 0; i < v.size(); i++)             ans *= v.get(i);           return ans;     }       // Driver code     public static void main(String[] args)     {         int n = 12;           // function call         System.out.println(GoodNumber(n));     } }   // This code is contributed by ihritik

## Python 3

 # Python 3 program to find the # largest, good number in the # divisors of given number N.   # function to return distinct # prime factors def PrimeFactors(n):       # to store distinct     # prime factors     v = []       x = n       # run a loop upto sqrt(n)     i = 2     while(i * i <= n):         if (x % i == 0) :               # place this prime factor             # in vector             v.append(i)             while (x % i == 0):                 x //= i                           i += 1       # This condition is to handle     # the case when n is a prime     # number greater than 1     if (x > 1):         v.append(x)       return v   # function that returns good number def GoodNumber(n):           # distinct prime factors     v = PrimeFactors(n)       # to store answer     ans = 1       # product of all distinct prime     # factors is required answer     for i in range(len(v)):         ans *= v[i]       return ans   # Driver code if __name__ == "__main__":     n = 12       # function call     print(GoodNumber(n))   # This code is contributed # by ChitraNayal

## C#

 // C# program to find the largest, good // number in the divisors of given number N. using System; using System.Collections.Generic; public class GFG {     // function to return distinct prime factors       static List PrimeFactors(int n)     {           // to store distinct prime factors         List v = new List();         int x = n;           // run a loop upto sqrt(n)         for (int i = 2; i * i <= n; i++) {             if (x % i == 0) {                   // place this prime factor in vector                 v.Add(i);                 while (x % i == 0)                     x /= i;             }         }           // This condition is to handle the case when n         // is a prime number greater than 1         if (x > 1)             v.Add(x);           return v;     }       // function that returns good number     static int GoodNumber(int n)     {         // distinct prime factors         List v = new List(PrimeFactors(n));           // to store answer         int ans = 1;           // product of all distinct prime         // factors is required answer         for (int i = 0; i < v.Count; i++)             ans *= v[i];           return ans;     }       // Driver code     public static void Main(String[] args)     {         int n = 12;           // function call         Console.WriteLine(GoodNumber(n));     } }   // This code has been contributed by 29AjayKumar

## PHP

 1)         array_push(\$v, \$x);       return \$v; }   // function that returns good number function GoodNumber(\$n) {     // distinct prime factors     \$v = PrimeFactors(\$n);       // to store answer     \$ans = 1;       // product of all distinct prime     // factors is required answer     for (\$i = 0; \$i < count(\$v); \$i++)         \$ans *= \$v[\$i];       return \$ans; }   // Driver code \$n = 12;   // function call echo GoodNumber(\$n);   // This code is contributed by Rajput-Ji ?>

## Javascript



Output:

6

Time Complexity : O(sqrt(n) + k) ,where n is given number and k is number of distinct prime factors.

Space Complexity : O(k) ,to store distinct prime factors.