Check whether a number has exactly three distinct factors or not - GeeksforGeeks

27 May, 2021
Given a positive integer n(1 <= n <= 1018). Check whether a number has exactly three distinct factors or not. Print “Yes” if it has otherwise “No“.
Examples : 
Input : 9
Output: Yes
Explanation
Number 9 has exactly three factors:
1, 3, 9, hence answer is 'Yes'

Input  : 10
Output : No
Simple approach is to count factors by generating all divisors of a number by using this approach, after that check whether the count of all factors are equal to ‘3’ or not. Time complexity of this approach is O(sqrt(n)). 
Better approach is to use Number theory. According to property of perfect square, “Every perfect square(x2) always have only odd numbers of factors“. 
If the square root of given number(say x2) is prime(after conforming that number is perfect square) then it must have exactly three distinct factors i.e., 
A number 1 of course.Square root of a number i.e., x(prime number).Number itself i.e., x2.
A number 1 of course.
Square root of a number i.e., x(prime number).
Number itself i.e., x2.
Below is the implementation of above approach: 
C++
Java
Python3
C#
PHP
Javascript
// C++ program to check whether number// has exactly three distinct factors// or not#include <bits/stdc++.h>using namespace std; // Utility function to check whether a// number is prime or notbool isPrime(int n){    // Corner cases    if (n <= 1)        return false;    if (n <= 3)        return true;     // This is checked so that we can skip    // middle five numbers in below loop    if (n % 2 == 0 || n % 3 == 0)        return false;     for (int i = 5; i * i <= n; i = i + 6)        if (n % i == 0 || n % (i + 2) == 0)            return false;     return true;} // Function to check whether given number// has three distinct factors or notbool isThreeDisctFactors(long long n){    // Find square root of number    int sq = (int)sqrt(n);     // Check whether number is perfect    // square or not    if (1LL * sq * sq != n)        return false;     // If number is perfect square, check    // whether square root is prime or    // not    return isPrime(sq) ? true : false;} // Driver programint main(){    long long num = 9;    if (isThreeDisctFactors(num))        cout << "Yes\n";    else        cout << "No\n";     num = 15;    if (isThreeDisctFactors(num))        cout << "Yes\n";    else        cout << "No\n";     num = 12397923568441;    if (isThreeDisctFactors(num))        cout << "Yes\n";    else        cout << "No\n";     return 0;}
// Java program to check whether number// has exactly three distinct factors// or notpublic class GFG {  // Utility function to check whether a// number is prime or notstatic boolean isPrime(int n){    // Corner cases    if (n <= 1)        return false;    if (n <= 3)        return true;     // This is checked so that we can skip    // middle five numbers in below loop    if (n % 2 == 0 || n % 3 == 0)        return false;     for (int i = 5; i * i <= n; i = i + 6)        if (n % i == 0 || n % (i + 2) == 0)            return false;     return true;} // Function to check whether given number// has three distinct factors or notstatic boolean isThreeDisctFactors(long n){    // Find square root of number    int sq = (int)Math.sqrt(n);     // Check whether number is perfect    // square or not    if (1L * sq * sq != n)        return false;     // If number is perfect square, check    // whether square root is prime or    // not    return isPrime(sq) ? true : false;} // Driver program    public static void main(String[] args) {        long num = 9;    if (isThreeDisctFactors(num))        System.out.println("Yes");    else        System.out.println("No");     num = 15;    if (isThreeDisctFactors(num))        System.out.println("Yes");    else        System.out.println("No");     num = 12397923568441L;    if (isThreeDisctFactors(num))        System.out.println("Yes");    else        System.out.println("No");    }}
# Python 3 program to check whether number# has exactly three distinct factors# or not from math import sqrt# Utility function to check whether a# number is prime or notdef isPrime(n):    # Corner cases    if (n <= 1):        return False    if (n <= 3):        return True     # This is checked so that we can skip    # middle five numbers in below loop    if (n % 2 == 0 or n % 3 == 0):        return False         k= int(sqrt(n))+1    for i in range(5,k,6):        if (n % i == 0 or n % (i + 2) == 0):            return False     return True # Function to check whether given number# has three distinct factors or notdef isThreeDisctFactors(n):    # Find square root of number    sq = int(sqrt(n))     # Check whether number is perfect    # square or not    if (1 * sq * sq != n):        return False     # If number is perfect square, check    # whether square root is prime or    # not    if (isPrime(sq)):        return True    else:        return False # Driver programif __name__ == '__main__':    num = 9    if (isThreeDisctFactors(num)):        print("Yes")    else:        print("No")     num = 15    if (isThreeDisctFactors(num)):        print("Yes")    else:        print("No")     num = 12397923568441    if (isThreeDisctFactors(num)):        print("Yes")    else:        print("No") # This code is contributed by# Surendra_Gangwar
// C# program to check whether number// has exactly three distinct factors// or notusing System; public class GFG {     // Utility function to check whether    // a number is prime or not    static bool isPrime(int n)    {         // Corner cases        if (n <= 1)            return false;        if (n <= 3)            return true;         // This is checked so that we can        // skip middle five numbers in        // below loop        if (n % 2 == 0 || n % 3 == 0)            return false;         for (int i = 5; i * i <= n; i = i + 6)            if (n % i == 0 || n % (i + 2) == 0)                return false;         return true;    }     // Function to check whether given number    // has three distinct factors or not    static bool isThreeDisctFactors(long n)    {         // Find square root of number        int sq = (int)Math.Sqrt(n);         // Check whether number is perfect        // square or not        if (1LL * sq * sq != n)            return false;         // If number is perfect square, check        // whether square root is prime or        // not        return isPrime(sq) ? true : false;    }     // Driver program    static public void Main()    {        long num = 9;        if (isThreeDisctFactors(num))            Console.WriteLine("Yes");        else            Console.WriteLine("No");         num = 15;        if (isThreeDisctFactors(num))            Console.WriteLine("Yes");        else            Console.WriteLine("No");         num = 12397923568441;        if (isThreeDisctFactors(num))            Console.WriteLine("Yes");        else            Console.WriteLine("No");    }} // This Code is contributed by vt_m.
<?php// PHP program to check whether// number has exactly three// distinct factors or not // Utility function to check// whether a number is prime// or notfunction isPrime($n){    // Corner cases    if ($n <= 1)        return false;    if ($n <= 3)        return true;     // This is checked so that    // we can skip middle five    // numbers in below loop    if ($n % 2 == 0 || $n % 3 == 0)        return false;     for ($i = 5; $i * $i <= $n;                   $i = $i + 6)        if ($n % $i == 0 ||            $n % ($i + 2) == 0)            return false;     return true;} // Function to check// whether given number// has three distinct// factors or notfunction isThreeDisctFactors($n){    // Find square root of number    $sq = sqrt($n);     // Check whether number is    // perfect square or not    if ($sq * $sq != $n)        return false;     // If number is perfect square,    // check whether square root is    // prime or not    return isPrime($sq) ? true : false;} // Driver Code$num = 9;if (isThreeDisctFactors($num))    echo "Yes\n";else    echo "No\n"; $num = 15;if (isThreeDisctFactors($num))    echo "Yes\n";else    echo "No\n"; $num = 12397923568441;if (isThreeDisctFactors($num))    echo "Yes\n";else    echo "No\n"; // This code is contributed by ak_t?>
<script> // Javascript program to check whether// number has exactly three distinct// factors or not // Utility function to check whether a// number is prime or notfunction isPrime(n){         // Corner cases    if (n <= 1)        return false;    if (n <= 3)        return true;     // This is checked so that we can skip    // middle five numbers in below loop    if (n % 2 == 0 || n % 3 == 0)        return false;     for(let i = 5; i * i <= n; i = i + 6)        if (n % i == 0 || n % (i + 2) == 0)            return false;     return true;} // Function to check whether given number// has three distinct factors or notfunction isThreeDisctFactors(n){         // Find square root of number    let sq = parseInt(Math.sqrt(n));     // Check whether number is perfect    // square or not    if (sq * sq != n)        return false;     // If number is perfect square, check    // whether square root is prime or    // not    return isPrime(sq) ? true : false;} // Driver codelet num = 9;if (isThreeDisctFactors(num))    document.write("Yes<br>");else    document.write("No<br>"); num = 15;if (isThreeDisctFactors(num))    document.write("Yes<br>");else    document.write("No<br>"); num = 12397923568441;if (isThreeDisctFactors(num))    document.write("Yes<br>");else    document.write("No<br>");     // This code is contributed by souravmahato348  </script>
Output : 
Yes
No
No
Time complexity : O(n1/4) Auxiliary space: O(1)
This article is contributed by Shubham Bansal. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.- 
vt_m
jit_t
29AjayKumar
SURENDRA_GANGWAR
ManasChhabra2
souravmahato348
simmytarika5
Numbers
Prime Number
prime-factor
Mathematical
Mathematical
Prime Number
Numbers
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Prime Numbers
Modulo Operator (%) in C/C++ with Examples
Merge two sorted arrays
Operators in C / C++
Program to find sum of elements in a given array
Program for factorial of a number
Print all possible combinations of r elements in a given array of size n
Algorithm to solve Rubik's Cube
Minimum number of jumps to reach end
The Knight's tour problem | Backtracking-1