Sphenic Number

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 C++ implementation of the idea.

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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 function 
int main() 
    int n = 60; 
    simpleSieve();
    int ans=find_sphene(n);
    if(ans)
    cout<<"Yes";
    else
    cout<<"NO";

chevron_right


Output:



Yes

References:
1. OEIS
2. https://en.wikipedia.org/wiki/Sphenic_number

This article is contributed by mra11145. 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.

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.




My Personal Notes arrow_drop_up

Improved By : Mohammedansari1111145