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 = 2^{2}x 3 x 5 has exactly 3 prime factors but is not a sphenic number

Sphenic number can be checked by first generating the Least prime factor of numbers till n.

Then we could simply divide the number by its least prime factor and then that number by its least prime factor, and so on and then check if the number has exactly 3 distinct prime factors.

Below is the C++ implementation of the idea.

`// C++ program to check whether a number is a ` `// Sphenic number or not ` `#include<bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `const` `int` `MAX = 1000; ` ` ` `// Create a vector to store least primes. ` `// Initialize all entries as 0. ` `vector<` `int` `> least_pf(MAX, 0); ` ` ` `// This function fills values in least_pf[]. ` `// such that the value of least_pf[i] stores ` `// smallest prime factor of i. ` `// This function is based on sieve of Eratosthenes ` `void` `leastPrimeFactor(` `int` `n) ` `{ ` ` ` `// Least prime factor for 1 is 1 ` ` ` `least_pf[1] = 1; ` ` ` ` ` `// Store least prime factor for all other ` ` ` `// numbers. ` ` ` `for` `(` `int` `i = 2; i <= n; i++) ` ` ` `{ ` ` ` `// least_pf[i] == 0 means i is prime ` ` ` `if` `(least_pf[i] == 0) ` ` ` `{ ` ` ` `// Initializing prime number as its own ` ` ` `// least prime factor. ` ` ` `least_pf[i] = i; ` ` ` ` ` `// Mark 'i' as a divisor for all its ` ` ` `// multiples that are not already marked ` ` ` `for` `(` `int` `j = 2*i; j <= n; j += i) ` ` ` `if` `(least_pf[j] == 0) ` ` ` `least_pf[j] = i; ` ` ` `} ` ` ` `} ` `} ` ` ` `// Function returns true if n is a sphenic number and ` `// No otherwise ` `bool` `isSphenic(` `int` `n) ` `{ ` ` ` `// Stores three prime factors of n. We have at-most ` ` ` `// three elements in s. ` ` ` `set<` `int` `> s; ` ` ` ` ` `// Keep finding least prime factors until n becomes 1 ` ` ` `while` `(n > 1) ` ` ` `{ ` ` ` `// Find least prime factor of current value of n. ` ` ` `int` `lpf = least_pf[n]; ` ` ` ` ` `// We store current size of s to check if a prime ` ` ` `// factor repeats ` ` ` `int` `init_size = s.size(); ` ` ` ` ` `// Insert least prime factor of current value of n ` ` ` `s.insert(lpf); ` ` ` ` ` `// If either lpf repeats or number of lpfs becomes ` ` ` `// more than 3, then return false. ` ` ` `if` `(s.size() == init_size || s.size() > 3) ` ` ` ` ` `// same prime divides the ` ` ` `// number more than once ` ` ` `return` `false` `; ` ` ` ` ` `// Divide n by lpf ` ` ` `n /= lpf; ` ` ` `} ` ` ` ` ` `// Return true if size of set is 3 ` ` ` `return` `(s.size() == 3); ` `} ` ` ` `// Driver program to test above functions ` `int` `main() ` `{ ` ` ` `leastPrimeFactor(MAX); ` ` ` `for` `(` `int` `i=1; i<100; i++) ` ` ` `if` `(isSphenic(i)) ` ` ` `cout << i << ` `" "` `; ` ` ` `return` `0; ` `} ` |

**Output:**

Yes

Time Complexity: O(nlog(n))

Auxiliary Space: O(n)

**References:**

1. OEIS

2. https://en.wikipedia.org/wiki/Sphenic_number

This article is contributed by **Ayush Khanduri**. 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.

## Recommended Posts:

- Find minimum number to be divided to make a number a perfect square
- Count number of triplets with product equal to given number with duplicates allowed | Set-2
- Maximize a given unsigned number number by swapping bits at it's extreme positions.
- Count number of triplets with product equal to given number with duplicates allowed
- Python | Find the Number Occurring Odd Number of Times using Lambda expression and reduce function
- Given a number as a string, find the number of contiguous subsequences which recursively add up to 9
- Number of elements less than or equal to a given number in a given subarray | Set 2 (Including Updates)
- Number of ways to calculate a target number using only array elements
- Number which has the maximum number of distinct prime factors in the range M to N
- Number of ways to divide a given number as a set of integers in decreasing order
- Maximum number of contiguous array elements with same number of set bits
- Given a number as a string, find the number of contiguous subsequences which recursively add up to 9 | Set 2
- Given a n-ary tree, count number of nodes which have more number of children than parents
- Querying maximum number of divisors that a number in a given range has
- Minimum number of operation required to convert number x into y