Sphenic Number

23 Jun, 2022
A Sphenic Number is a positive integer n which is product of exactly three distinct primes. The first few sphenic numbers are 30, 42, 66, 70, 78, 102, 105, 110, 114, ... Given a number n, determine whether it is a Sphenic Number or not. 
Examples: 
Input : 30
Output : Yes
Explanation : 30 is the smallest Sphenic number, 
           30 = 2 × 3 × 5 
           the product of the smallest three primes

Input : 60
Output : No
Explanation : 60 = 22 x 3 x 5
              has exactly 3 prime factors but
              is not a sphenic number
Sphenic number can be checked by fact that every sphenic number will have exactly 8 divisor SPHENIC NUMBER So first We will try to find if the number is having exactly 8 divisors if not then simply answer is no.If there are exactly 8 divisors then we will confirm weather the first 3 digits after 1 are prime or not. Eg. 30 (sphenic number) 30=p*q*r(i.e p,q and r are three distinct prime no and their product are 30) the set of divisor is (1,2,3,5,6,10,15,30).
Below is the implementation of the idea. 
C++
Java
Python3
C#
Javascript
// C++ program to check whether a number is a// Sphenic number or not#include<bits/stdc++.h>using namespace std;//create a global array of size 10001;bool arr[1001];// This functions finds all primes smaller than 'limit'// using simple sieve of eratosthenes.void simpleSieve(){    // initialize all entries of it as true. A value    // in mark[p] will finally be false if 'p' is Not    // a prime, else true.    memset(arr,true,sizeof(arr));     // One by one traverse all numbers so that their    // multiples can be marked as composite.    for(int p=2;p*p<1001;p++)    {         // If p is not changed, then it is a prime        if(arr[p])        {// Update all multiples of p            for(int i=p*2;i<1001;i=i+p)            arr[i]=false;        }    }}int find_sphene(int N){    int arr1[8]={0};   //to store the 8 divisors    int count=0;        //to count the number of divisor    int j=0;    for(int i=1;i<=N;i++)        {        if(N%i==0 &&count<9)               {            count++;            arr1[j++]=i;        }    }    //finally check if there re 8 divisor and all the numbers are distinct prime no return 1    //else return 0    if(count==8 && (arr[arr1[1]] && arr[arr1[2]] && arr[arr1[3]]))    return 1;    return 0;} // Driver program to test above functionint main(){    int n = 60;    simpleSieve();    int ans=find_sphene(n);    if(ans)    cout<<"Yes";    else    cout<<"NO";}
// Java program to check whether a number is a// Sphenic number or notimport java.util.*; class GFG{   // create a global array of size 10001;static boolean []arr = new boolean[1001];   // This functions finds all primes smaller than 'limit'// using simple sieve of eratosthenes.static void simpleSieve(){    // initialize all entries of it as true. A value    // in mark[p] will finally be false if 'p' is Not    // a prime, else true.    Arrays.fill(arr, true);     // One by one traverse all numbers so that their    // multiples can be marked as composite.    for(int p = 2; p * p < 1001; p++)    {               // If p is not changed, then it is a prime        if(arr[p])        {                     // Update all multiples of p            for(int i = p * 2; i < 1001; i = i + p)            arr[i] = false;        }    }}static int find_sphene(int N){    int []arr1 = new int[8];   // to store the 8 divisors    int count = 0;        // to count the number of divisor    int j = 0;    for(int i = 1; i <= N; i++)        {        if(N % i == 0 && count < 8)               {            count++;            arr1[j++] = i;                     }    }       // finally check if there re 8 divisor and    // all the numbers are distinct prime no return 1    // else return 0);    if(count == 8 && (arr[arr1[1]] && arr[arr1[2]] && arr[arr1[3]]))      return 1;         return 0;} // Driver codepublic static void main(String[] args){    int n = 60;    simpleSieve();    int ans = find_sphene(n);    if(ans == 1)      System.out.print("Yes");    else      System.out.print("NO");}} // This code is contributed by aashish1995
# Python3 program to check whether a number# is a Sphenic number or not # Create a global array of size 1001;arr = [True] * (1001) # This functions finds all primes smaller# than 'limit' using simple sieve of# eratosthenes.def simpleSieve():         # Initialize all entries of it as    # True. A value in mark[p] will    # finally be False if 'p' is Not    # a prime, else True.    k = 0     # One by one traverse all numbers so    # that their multiples can be marked    # as composite.    for p in range(2, 1001):        if (p * p > 1001):            break                     # If p is not changed, then it is a prime        if (arr[p]):             # Update all multiples of p            for k in range(p, 1001, k + p):                arr[k] = False         def find_sphene(N):         # To store the 8 divisors    arr1 = [0] * (8)         # To count the number of divisor    count = 0    j = 0         for i in range(1, N + 1):        if (N % i == 0 and count < 8):            count += 1            arr1[j] = i            j += 1                 # Finally check if there re 8 divisor and    # all the numbers are distinct prime no return 1    # else return 0);    if (count == 8 and (arr[arr1[1]] and       arr[arr1[2]] and arr[arr1[3]])):        return 1;     return 0; # Driver codeif __name__ == '__main__':         n = 60    simpleSieve()    ans = find_sphene(n)         if (ans == 1):        print("Yes")    else:        print("NO") # This code is contributed by gauravrajput1
// C# program to check whether a number// is a Sphenic number or notusing System; class GFG{   // Create a global array of size 10001;static bool []arr = new bool[1001];   // This functions finds all primes smaller than// 'limit'. Using simple sieve of eratosthenes.static void simpleSieve(){         // Initialize all entries of it as true.    // A value in mark[p] will finally be    // false if 'p' is Not a prime, else true.    for(int i = 0;i<1001;i++)        arr[i] = true;             // One by one traverse all numbers so    // that their multiples can be marked    // as composite.    for(int p = 2; p * p < 1001; p++)    {                 // If p is not changed, then it        // is a prime        if (arr[p])        {                         // Update all multiples of p            for(int i = p * 2; i < 1001; i = i + p)                arr[i] = false;        }    }} static int find_sphene(int N){         // To store the 8 divisors    int []arr1 = new int[8];           // To count the number of divisor    int count = 0;           int j = 0;         for(int i = 1; i <= N; i++)        {        if (N % i == 0 && count < 8)               {            count++;            arr1[j++] = i;        }    }       // Finally check if there re 8 divisor    // and all the numbers are distinct prime    // no return 1 else return 0);    if (count == 8 && (arr[arr1[1]] &&      arr[arr1[2]] && arr[arr1[3]]))        return 1;         return 0;} // Driver codepublic static void Main(String[] args){    int n = 60;    simpleSieve();    int ans = find_sphene(n);         if (ans == 1)        Console.Write("Yes");    else        Console.Write("NO");}} // This code is contributed by aashish1995
<script>// javascript program to check whether a number is a// Sphenic number or not     // create a global array of size 10001;    // initialize all entries of it as true. A value        // in mark[p] will finally be false if 'p' is Not        // a prime, else true.    let arr = Array(1001).fill(true);     // This functions finds all primes smaller than 'limit'    // using simple sieve of eratosthenes.    function simpleSieve()    {             // One by one traverse all numbers so that their        // multiples can be marked as composite.        for (let p = 2; p * p < 1001; p++) {             // If p is not changed, then it is a prime            if (arr[p]) {                 // Update all multiples of p                for (let i = p * 2; i < 1001; i = i + p)                    arr[i] = false;            }        }    }     function find_sphene(N) {        var arr1 = Array(8).fill(0); // to store the 8 divisors        var count = 0; // to count the number of divisor        var j = 0;        for (let i = 1; i <= N; i++) {            if (N % i == 0 && count < 8) {                count++;                arr1[j++] = i;             }        }         // finally check if there re 8 divisor and        // all the numbers are distinct prime no return 1        // else return 0);        if (count == 8 && (arr[arr1[1]] && arr[arr1[2]] && arr[arr1[3]]))            return 1;         return 0;    }     // Driver code         var n = 60;    simpleSieve();    var ans = find_sphene(n);    if (ans == 1)        document.write("Yes");    else        document.write("NO"); // This code is contributed by aashish1995</script>
Output: 
NO
Time Complexity: O(√p log p) Auxiliary Space: O(n)
References: 1. OEIS 2. https://en.wikipedia.org/wiki/Sphenic_number
This article is contributed by Aarti_Rathi and mra11145. 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. 
Mohammedansari1111145
aashish1995
GauravRajput1
codewithshinchan
Prime Number
prime-factor
sieve
Mathematical
Mathematical
Prime Number
sieve
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Merge two sorted arrays
Operators in C / C++
Prime Numbers
Find minimum number of coins that make a given value
Minimum number of jumps to reach end
Algorithm to solve Rubik's Cube
Modulo 10^9+7 (1000000007)
The Knight's tour problem | Backtracking-1
Modulo Operator (%) in C/C++ with Examples
Program for Decimal to Binary Conversion