Largest factor of a given number which is a perfect square

21 Sep, 2021
Given a number . The task is to find the largest factor of that number which is a perfect square.Examples: 
Input : N = 420
Output : 4

Input : N = 100
Output : 100
 
A Simple Solution is to traverse all of the numbers in decreasing order from the given number down till 1 and if any of these numbers is a factor of the given number and is also a perfect square, print that number.Time Complexity: O(N)Better Solution : A better solution is to use prime factorization of the given number.
First find all the prime factors of that number till sqrt(num).
Take a variable, answer and initialize it to 1. It represents the largest square number which is also a factor of that number.
Now, Check If any prime number occurs even number of times in the prime factorization of the given number, if yes then multiply the answer with that prime factor the number of times it occurs.
Else, if it occurs odd number of times then multiply the answer with prime number (K – 1) times, K is the frequency of that prime factor in the prime factorization.
Below is the implementation of the above approach: 
C++
Java
Python 3
C#
PHP
Javascript
// C++ program to find the largest factor of// a number which is also a perfect square #include <cmath>#include <iostream>using namespace std; // Function to find the largest factor// of a given number which// is a perfect squareint largestSquareFactor(int num){    // Initialise the answer to 1    int answer = 1;     // Finding the prime factors till sqrt(num)    for (int i = 2; i < sqrt(num); ++i) {        // Frequency of the prime factor in the        // factorisation initialised to 0        int cnt = 0;        int j = i;         while (num % j == 0) {            cnt++;            j *= i;        }         // If the frequency is odd then multiply i        // frequency-1 times to the answer        if (cnt & 1) {            cnt--;            answer *= pow(i, cnt);        }        // Else if it is even, multiply        // it frequency times        else {            answer *= pow(i, cnt);        }    }     return answer;} // Driver Codeint main(){    int N = 420;     cout << largestSquareFactor(N);     return 0;}
// Java program to find the largest factor of// a number which is also a perfect square class GFG{   // Function to find the largest factor// of a given number which// is a perfect squarestatic int largestSquareFactor(int num){    // Initialise the answer to 1    int answer = 1;       // Finding the prime factors till sqrt(num)    for (int i = 2; i < Math.sqrt(num); ++i) {        // Frequency of the prime factor in the        // factorisation initialised to 0        int cnt = 0;        int j = i;           while (num % j == 0) {            cnt++;            j *= i;        }           // If the frequency is odd then multiply i        // frequency-1 times to the answer        if ((cnt & 1)!=0) {            cnt--;            answer *= Math.pow(i, cnt);        }        // Else if it is even, multiply        // it frequency times        else {            answer *= Math.pow(i, cnt);        }    }       return answer;}   // Driver Codepublic static void  main(String args[]){    int N = 420;       System.out.println(largestSquareFactor(N));   }}
# Python 3 program to find the largest# factor of a number which is also a# perfect squareimport math # Function to find the largest factor# of a given number which is a# perfect squaredef largestSquareFactor( num):     # Initialise the answer to 1    answer = 1     # Finding the prime factors till sqrt(num)    for i in range(2, int(math.sqrt(num))) :                 # Frequency of the prime factor in the        # factorisation initialised to 0        cnt = 0        j = i         while (num % j == 0) :            cnt += 1            j *= i         # If the frequency is odd then multiply i        # frequency-1 times to the answer        if (cnt & 1) :            cnt -= 1            answer *= pow(i, cnt)                 # Else if it is even, multiply        # it frequency times        else :            answer *= pow(i, cnt)    return answer # Driver Codeif __name__ == "__main__":    N = 420     print(largestSquareFactor(N)) # This code is contributed# by ChitraNayal
// C# program to find the largest factor of// a number which is also a perfect squareusing System; class GFG{     // Function to find the largest factor of// a given number which is a perfect squarestatic double largestSquareFactor(double num){    // Initialise the answer to 1    double answer = 1;     // Finding the prime factors    // till sqrt(num)    for (int i = 2; i < Math.Sqrt(num); ++i)    {        // Frequency of the prime factor in        // the factorisation initialised to 0        int cnt = 0;        int j = i;         while (num % j == 0)        {            cnt++;            j *= i;        }         // If the frequency is odd then multiply i        // frequency-1 times to the answer        if ((cnt & 1) != 0)        {            cnt--;            answer *= Math.Pow(i, cnt);        }                 // Else if it is even, multiply        // it frequency times        else        {            answer *= Math.Pow(i, cnt);        }    }     return answer;} // Driver Codestatic public void Main (){    int N = 420;    Console.WriteLine(largestSquareFactor(N));}} // This code is contributed by Sach_Code
<?php// PHP program to find the largest// factor of a number which is also// a perfect square // Function to find the largest// factor of a given number which// is a perfect squarefunction largestSquareFactor($num){    // Initialise the answer to 1    $answer = 1;     // Finding the prime factors    // till sqrt(num)    for ($i = 2; $i < sqrt($num); ++$i)    {        // Frequency of the prime factor        // in the factorisation initialised to 0        $cnt = 0;        $j = $i;         while ($num % $j == 0)        {            $cnt++;            $j *= $i;        }         // If the frequency is odd then        // multiply i frequency-1 times        // to the answer        if ($cnt & 1)        {            $cnt--;            $answer *= pow($i, $cnt);        }                 // Else if it is even, multiply        // it frequency times        else        {            $answer *= pow($i, $cnt);        }    }     return $answer;} // Driver Code$N = 420;echo largestSquareFactor($N); // This code is contributed// by Sach_Code?>
<script>// Javascript program to find the largest factor of// a number which is also a perfect square // Function to find the largest factor// of a given number which// is a perfect squarefunction largestSquareFactor(num){     // Initialise the answer to 1    let answer = 1;     // Finding the prime factors till sqrt(num)    for (let i = 2; i < Math.sqrt(num); ++i)    {             // Frequency of the prime factor in the        // factorisation initialised to 0        let cnt = 0;        let j = i;         while (num % j == 0) {            cnt++;            j *= i;        }         // If the frequency is odd then multiply i        // frequency-1 times to the answer        if (cnt & 1)        {            cnt--;            answer *= Math.pow(i, cnt);        }                 // Else if it is even, multiply        // it frequency times        else {            answer *= Math.pow(i, cnt);        }    }     return answer;} // Driver Codelet N = 420; document.write(largestSquareFactor(N)); // This code is contributed by souravmahato348.</script>
4
 
Time Complexity: O( sqrt(N) )
tufan_gupta2000
Sach_Code
ukasp
souravmahato348
rajeev0719singh
simmytarika5
maths-perfect-square
prime-factor
sieve
Technical Scripter 2018
Algorithms
Competitive Programming
Mathematical
Technical Scripter
Mathematical
sieve
Algorithms
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.