logo

Numéro sphénique

Essayez-le sur GfG Practice ' title= #practiceLinkDiv { display : aucun !important; }

UN Numéro sphénique est un entier positif n qui est un produit d’exactement trois nombres premiers distincts. Les premiers numéros sphéniques sont 30 42 66 70 78 102 105 110 114... 
Étant donné un numéro n déterminer s'il s'agit d'un numéro sphénique ou non. 

tableau d'octets Java en chaîne

Exemples : 

Saisir : 30
Sortir : Oui
Explication : 30 est le plus petit nombre sphénique
30 = 2 × 3 × 5 le produit des trois plus petits nombres premiers



Saisir : 60
Sortir : Non
Explication : 60 = 22x 3 x 5 a exactement 3 facteurs premiers mais n'est pas un nombre sphénique

Pratique recommandée Numéro sphénique Essayez-le !

Le nombre sphénique peut être vérifié par le fait que chaque nombre sphénique aura exactement 8 diviseurs. NUMÉRO SPHÉNIQUE  
Nous allons donc d’abord essayer de déterminer si le nombre a exactement 8 diviseurs, sinon la réponse simple est non. S'il y a exactement 8 diviseurs, nous confirmerons si les 3 premiers chiffres après 1 sont premiers ou non. 

Par exemple. 30 (numéro sphénique) 
30 = p*q*r (c'est-à-dire que pq et r sont trois nombres premiers distincts et leur produit vaut 30) 
l'ensemble des diviseurs est (12356101530).

Vous trouverez ci-dessous la mise en œuvre de l'idée. 

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') 

Sortir:  

NO

Complexité temporelle : O(?p journal p) 
Espace auxiliaire : Sur)

Références :  
1. OEIS  
2. https://en.wikipedia.org/wiki/Sphenic_number

Créer un quiz