logo

Número esfénico

Pruébalo en GfG Practice ' title= #practiceLinkDiv { mostrar: ninguno !importante; }

A Número esfénico es un entero positivo norte que es un producto de exactamente tres números primos distintos. Los primeros números esfénicos son 30 42 66 70 78 102 105 110 114... 
dado un numero norte determinar si es un Número Esfénico o no. 

instancia java de

Ejemplos: 

Aporte : 30
Producción : Sí
Explicación : 30 es el número esfénico más pequeño
30 = 2 × 3 × 5 el producto de los tres primos más pequeños



Aporte : 60
Producción : No
Explicación : 60 = 22x 3 x 5 tiene exactamente 3 factores primos pero no es un número esfénico

Práctica recomendada Número esfénico ¡Pruébalo!

El número esfénico se puede comprobar por el hecho de que cada número esfénico tendrá exactamente 8 divisores. NÚMERO ESFÉNICO  
Entonces, primero intentaremos encontrar si el número tiene exactamente 8 divisores; de lo contrario, la respuesta simple es no. Si hay exactamente 8 divisores entonces confirmaremos si los primeros 3 dígitos después del 1 son primos o no. 

P.ej. 30 (número esfénico) 
30=p*q*r(es decir, pq y r son tres números primos distintos y su producto es 30) 
el conjunto del divisor es (12356101530).

A continuación se muestra la implementación de la idea. 

C++
// C++ program to check whether a number is a // Sphenic number or not #include   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(arrtruesizeof(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'; }  
Java
// Java program to check whether a number is a // Sphenic number or not import 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 code 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'); }  } // This code is contributed by aashish1995 
C#
// C# program to check whether a number  // is a Sphenic number or not using 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 code 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'); }  } // This code is contributed by aashish1995  
JavaScript
<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> 
Python3
def simpleSieve(): # Initialize all entries of arr as True arr = [True] * 1001 # One by one traverse all numbers so that their # multiples can be marked as composite for p in range(2 int(1001 ** 0.5) + 1): # If p is not changed then it is a prime if arr[p]: # Update all multiples of p for i in range(p * 2 1001 p): arr[i] = False return arr def find_sphene(N): arr = simpleSieve() arr1 = [0] * 8 # to store the 8 divisors count = 0 # to count the number of divisors j = 0 for i in range(1 N + 1): if N % i == 0 and count < 9: count += 1 arr1[j] = i j += 1 # finally check if there are 8 divisors and all the numbers are distinct prime no return 1 # else return 0 if count == 8 and all(arr[arr1[i]] for i in range(1 4)): return 1 return 0 # Driver program to test above function if __name__ == '__main__': n = 60 ans = find_sphene(n) if ans: print('Yes') else: print('No') 

Producción:  

NO

Complejidad del tiempo: O(?p Iniciar sesiónp) 
Espacio Auxiliar: En)

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

Crear cuestionario