Un número esfénico es un número entero positivo n que es 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 número n , determine si es un número esfénico o no.
Ejemplos:
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
El número esfénico se puede verificar por el hecho de que cada número esfénico tendrá exactamente 8 divisores . NÚMERO ESFÉNICO
Entonces, primero trataremos de encontrar si el número tiene exactamente 8 divisores; de lo contrario, simplemente la respuesta es no. Si hay exactamente 8 divisores, entonces lo haremos confirme 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, p,q y r son tres números primos distintos y su producto es 30)
el conjunto de divisores es (1,2,3,5,6,10,15, 30).
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<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"; }
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
Python3
# 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 code if __name__ == '__main__': n = 60 simpleSieve() ans = find_sphene(n) if (ans == 1): print("Yes") else: print("NO") # This code is contributed by gauravrajput1
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>
Producción:
NO
Complejidad temporal: O(√p log p)
Espacio auxiliar: O(n)
Referencias:
1. OEIS
2. https://en.wikipedia.org/wiki/Sphenic_number
Este artículo es una contribución de Aarti_Rathi y mra11145 . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA