logo

Sfenično število

Preizkusite na GfG Practice ' title= #practiceLinkDiv { display: none !important; }

A Sfenično število je pozitivno celo število n ki je produkt natanko treh različnih praštevil. Prvih nekaj sfeničnih števil je 30 42 66 70 78 102 105 110 114 ... 
Glede na številko n ugotoviti, ali je sfenično število ali ne. 

binarno drevo java

Primeri: 

Vnos : 30
Izhod : Da
Razlaga : 30 je najmanjše sfenično število
30 = 2 × 3 × 5 zmnožek najmanjših treh praštevil



Vnos : 60
Izhod : Ne
Razlaga : 60 = 22x 3 x 5 ima natanko 3 prafaktorje, vendar ni sfenično število

Priporočena praksa Sfenično število Poskusite!

Sfenično število je mogoče preveriti z dejstvom, da bo imelo vsako sfenično število točno 8 deliteljev. SFENIČNO ŠTEVILO  
Najprej bomo poskušali ugotoviti, ali ima število točno 8 deliteljev, če ne, potem je preprost odgovor ne. Če je deliteljev natančno 8, bomo potrdili, ali so prve 3 števke za 1 praštevilne ali ne. 

Npr. 30 (sfenično število) 
30=p*q*r(tj. pq in r sta tri različna praštevila in njun produkt je 30) 
množica delitelja je (12356101530).

Spodaj je izvedba ideje. 

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

Izhod:  

NO

Časovna zapletenost: O(?p log p) 
Pomožni prostor: O(n)

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

Ustvari kviz