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

Given a number N. The task is to find the largest good number in the divisors of 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 above approach:

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to find the largest, good
// number in the divisors of given number N.
#include <bits/stdc++.h>
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;
}
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

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

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to find the largest, good 
// number in the divisors of given number N. 
  
// function to return distinct prime factors 
function PrimeFactors($n
    // to store distinct prime factors 
    $v = array(); 
  
    $x = $n
  
    // run a loop upto sqrt(n) 
    for ($i = 2; $i * $i <= $n; $i++) 
    
        if ($x % $i == 0)
        
  
            // place this prime factor in vector 
            array_push($v, $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) 
        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
?>
chevron_right

Output:
6

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.





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 :