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 whether 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++
#include<bits/stdc++.h>
using namespace std;
bool arr[1001];
void simpleSieve()
{
memset (arr, true , sizeof (arr));
for ( int p=2;p*p<1001;p++)
{
if (arr[p])
{
for ( int i=p*2;i<1001;i=i+p)
arr[i]= false ;
}
}
}
int find_sphene( int N)
{
int arr1[8]={0};
int count=0;
int j=0;
for ( int i=1;i<=N;i++)
{
if (N%i==0 &&count<9)
{
count++;
arr1[j++]=i;
}
}
if (count==8 && (arr[arr1[1]] && arr[arr1[2]] && arr[arr1[3]]))
return 1;
return 0;
}
int main()
{
int n = 60;
simpleSieve();
int ans=find_sphene(n);
if (ans)
cout<< "Yes" ;
else
cout<< "NO" ;
}
|
Java
import java.util.*;
class GFG
{
static boolean []arr = new boolean [ 1001 ];
static void simpleSieve()
{
Arrays.fill(arr, true );
for ( int p = 2 ; p * p < 1001 ; p++)
{
if (arr[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 ];
int count = 0 ;
int j = 0 ;
for ( int i = 1 ; i <= N; i++)
{
if (N % i == 0 && count < 8 )
{
count++;
arr1[j++] = i;
}
}
if (count == 8 && (arr[arr1[ 1 ]] && arr[arr1[ 2 ]] && arr[arr1[ 3 ]]))
return 1 ;
return 0 ;
}
public 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" );
}
}
|
Python3
arr = [ True ] * ( 1001 )
def simpleSieve():
k = 0
for p in range ( 2 , 1001 ):
if (p * p > 1001 ):
break
if (arr[p]):
for k in range (p, 1001 , k + p):
arr[k] = False
def find_sphene(N):
arr1 = [ 0 ] * ( 8 )
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
if (count = = 8 and (arr[arr1[ 1 ]] and
arr[arr1[ 2 ]] and arr[arr1[ 3 ]])):
return 1 ;
return 0 ;
if __name__ = = '__main__' :
n = 60
simpleSieve()
ans = find_sphene(n)
if (ans = = 1 ):
print ( "Yes" )
else :
print ( "NO" )
|
C#
using System;
class GFG{
static bool []arr = new bool [1001];
static void simpleSieve()
{
for ( int i = 0;i<1001;i++)
arr[i] = true ;
for ( int p = 2; p * p < 1001; p++)
{
if (arr[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];
int count = 0;
int j = 0;
for ( int i = 1; i <= N; i++)
{
if (N % i == 0 && count < 8)
{
count++;
arr1[j++] = i;
}
}
if (count == 8 && (arr[arr1[1]] &&
arr[arr1[2]] && arr[arr1[3]]))
return 1;
return 0;
}
public static void Main(String[] args)
{
int n = 60;
simpleSieve();
int ans = find_sphene(n);
if (ans == 1)
Console.Write( "Yes" );
else
Console.Write( "NO" );
}
}
|
Javascript
<script>
let arr = Array(1001).fill( true );
function simpleSieve()
{
for (let p = 2; p * p < 1001; p++) {
if (arr[p]) {
for (let i = p * 2; i < 1001; i = i + p)
arr[i] = false ;
}
}
}
function find_sphene(N) {
var arr1 = Array(8).fill(0);
var count = 0;
var j = 0;
for (let i = 1; i <= N; i++) {
if (N % i == 0 && count < 8) {
count++;
arr1[j++] = i;
}
}
if (count == 8 && (arr[arr1[1]] && arr[arr1[2]] && arr[arr1[3]]))
return 1;
return 0;
}
var n = 60;
simpleSieve();
var ans = find_sphene(n);
if (ans == 1)
document.write( "Yes" );
else
document.write( "NO" );
</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.