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

• Last Updated : 21 May, 2021

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:

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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

```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<``int``> PrimeFactors(``int` `n)``{``    ``// to store distinct prime factors``    ``vector<``int``> 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<``int``> 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<``int``> PrimeFactors(``int` `n)``    ``{` `        ``// to store distinct prime factors``        ``List<``int``> v = ``new` `List<``int``>();``        ``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<``int``> v = ``new` `List<``int``>(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`

My Personal Notes arrow_drop_up