N'te intelligente Nummer

Gegeben eine Zahl n finde die n-te intelligente Zahl (1 <=n <=1000). Smart number is a number which has at least three distinct prime factors. We are given an upper limit on value of result as MAX For example 30 is 1st smart number because it has 2 3 5 as it's distinct prime factors. 42 is 2nd smart number because it has 2 3 7 as it's distinct prime factors. Beispiele:

Input : n = 1 Output: 30 // three distinct prime factors 2 3 5 Input : n = 50 Output: 273 // three distinct prime factors 3 7 13 Input : n = 1000 Output: 2664 // three distinct prime factors 2 3 37 
Empfohlen: Bitte lösen Sie es auf ÜBEN bevor Sie mit der Lösung fortfahren.

Die Idee basiert auf Sieb des Eratosthenes . Wir verwenden ein Array, um ein Array prime[] zu verwenden, um den Überblick über Primzahlen zu behalten. Wir verwenden dasselbe Array auch, um die Anzahl der bisher gesehenen Primfaktoren zu verfolgen. Immer wenn die Zahl 3 erreicht, addieren wir die Zahl zum Ergebnis.

  • Nehmen Sie ein Array primes[] und initialisieren Sie es mit 0.
  • Jetzt wissen wir, dass die erste Primzahl i = 2 ist, also markieren Sie Primzahlen[2] = 1, d. h. primes[i] = 1 gibt an, dass „i“ eine Primzahl ist.
  • Durchlaufen Sie nun das Array primes[] und markieren Sie alle Vielfachen von „i“ durch die Bedingung primes[j] -= 1, wobei „j“ ein Vielfaches von „i“ ist, und überprüfen Sie die Bedingung primes[j]+3 = 0, denn wann immer primes[j] zu -3 wird, bedeutet dies, dass es zuvor ein Vielfaches von drei verschiedenen Primfaktoren war. Wenn Bedingung Primzahlen[j]+3=0 wird wahr, was bedeutet, dass „j“ eine intelligente Zahl ist. Speichern Sie sie daher in einem Array-Ergebnis[].
  • Sortieren Sie nun das Array-Ergebnis[] und geben Sie Ergebnis[n-1] zurück.

Nachfolgend finden Sie die Umsetzung der obigen Idee. 

C++
   // C++ implementation to find n'th smart number   #include       using     namespace     std  ;   // Limit on result   const     int     MAX     =     3000  ;   // Function to calculate n'th smart number   int     smartNumber  (  int     n  )   {      // Initialize all numbers as not prime      int     primes  [  MAX  ]     =     {  0  };      // iterate to mark all primes and smart number      vector   <  int  >     result  ;      // Traverse all numbers till maximum limit      for     (  int     i  =  2  ;     i   <  MAX  ;     i  ++  )      {      // 'i' is maked as prime number because      // it is not multiple of any other prime      if     (  primes  [  i  ]     ==     0  )      {      primes  [  i  ]     =     1  ;      // mark all multiples of 'i' as non prime      for     (  int     j  =  i  *  2  ;     j   <  MAX  ;     j  =  j  +  i  )      {      primes  [  j  ]     -=     1  ;      // If i is the third prime factor of j      // then add it to result as it has at      // least three prime factors.      if     (     (  primes  [  j  ]     +     3  )     ==     0  )      result  .  push_back  (  j  );      }      }      }      // Sort all smart numbers      sort  (  result  .  begin  ()     result  .  end  ());      // return n'th smart number      return     result  [  n  -1  ];   }   // Driver program to run the case   int     main  ()   {      int     n     =     50  ;      cout      < <     smartNumber  (  n  );      return     0  ;   }   
Java
   // Java implementation to find n'th smart number   import     java.util.*  ;   import     java.lang.*  ;   class   GFG     {      // Limit on result      static     int     MAX     =     3000  ;      // Function to calculate n'th smart number      public     static     int     smartNumber  (  int     n  )      {          // Initialize all numbers as not prime      Integer  []     primes     =     new     Integer  [  MAX  ]  ;      Arrays  .  fill  (  primes       new     Integer  (  0  ));      // iterate to mark all primes and smart      // number      Vector   <  Integer  >     result     =     new     Vector   <>  ();      // Traverse all numbers till maximum      // limit      for     (  int     i     =     2  ;     i      <     MAX  ;     i  ++  )      {          // 'i' is maked as prime number      // because it is not multiple of      // any other prime      if     (  primes  [  i  ]     ==     0  )      {      primes  [  i  ]     =     1  ;      // mark all multiples of 'i'       // as non prime      for     (  int     j     =     i  *  2  ;     j      <     MAX  ;     j     =     j  +  i  )      {      primes  [  j  ]     -=     1  ;          // If i is the third prime      // factor of j then add it      // to result as it has at      // least three prime factors.      if     (     (  primes  [  j  ]     +     3  )     ==     0  )      result  .  add  (  j  );      }      }      }      // Sort all smart numbers      Collections  .  sort  (  result  );      // return n'th smart number      return     result  .  get  (  n  -  1  );      }      // Driver program to run the case      public     static     void     main  (  String  []     args  )      {      int     n     =     50  ;      System  .  out  .  println  (  smartNumber  (  n  ));      }   }   // This code is contributed by Prasad Kshirsagar   
Python3
   # Python3 implementation to find   # n'th smart number    # Limit on result    MAX   =   3000  ;   # Function to calculate n'th   # smart number    def   smartNumber  (  n  ):   # Initialize all numbers as not prime    primes   =   [  0  ]   *   MAX  ;   # iterate to mark all primes    # and smart number    result   =   [];   # Traverse all numbers till maximum limit    for   i   in   range  (  2     MAX  ):   # 'i' is maked as prime number because    # it is not multiple of any other prime    if   (  primes  [  i  ]   ==   0  ):   primes  [  i  ]   =   1  ;   # mark all multiples of 'i' as non prime   j   =   i   *   2  ;   while   (  j    <   MAX  ):   primes  [  j  ]   -=   1  ;   # If i is the third prime factor of j    # then add it to result as it has at    # least three prime factors.    if   (   (  primes  [  j  ]   +   3  )   ==   0  ):   result  .  append  (  j  );   j   =   j   +   i  ;   # Sort all smart numbers    result  .  sort  ();   # return n'th smart number    return   result  [  n   -   1  ];   # Driver Code   n   =   50  ;   print  (  smartNumber  (  n  ));   # This code is contributed by mits    
C#
   // C# implementation to find n'th smart number   using     System.Collections.Generic  ;   class     GFG     {      // Limit on result      static     int     MAX     =     3000  ;      // Function to calculate n'th smart number      public     static     int     smartNumber  (  int     n  )      {          // Initialize all numbers as not prime      int  []     primes     =     new     int  [  MAX  ];      // iterate to mark all primes and smart      // number      List   <  int  >     result     =     new     List   <  int  >  ();      // Traverse all numbers till maximum      // limit      for     (  int     i     =     2  ;     i      <     MAX  ;     i  ++  )      {          // 'i' is maked as prime number      // because it is not multiple of      // any other prime      if     (  primes  [  i  ]     ==     0  )      {      primes  [  i  ]     =     1  ;      // mark all multiples of 'i'       // as non prime      for     (  int     j     =     i  *  2  ;     j      <     MAX  ;     j     =     j  +  i  )      {      primes  [  j  ]     -=     1  ;          // If i is the third prime      // factor of j then add it      // to result as it has at      // least three prime factors.      if     (     (  primes  [  j  ]     +     3  )     ==     0  )      result  .  Add  (  j  );      }      }      }      // Sort all smart numbers      result  .  Sort  ();      // return n'th smart number      return     result  [  n  -  1  ];      }      // Driver program to run the case      public     static     void     Main  ()      {      int     n     =     50  ;      System  .  Console  .  WriteLine  (  smartNumber  (  n  ));      }   }   // This code is contributed by mits   
PHP
      // PHP implementation to find n'th smart number    // Limit on result    $MAX   =   3000  ;   // Function to calculate n'th smart number    function   smartNumber  (  $n  )   {   global   $MAX  ;   // Initialize all numbers as not prime    $primes  =  array_fill  (  0    $MAX    0  );   // iterate to mark all primes and smart number    $result  =  array  ();   // Traverse all numbers till maximum limit    for   (  $i  =  2  ;   $i   <  $MAX  ;   $i  ++  )   {   // 'i' is maked as prime number because    // it is not multiple of any other prime    if   (  $primes  [  $i  ]   ==   0  )   {   $primes  [  $i  ]   =   1  ;   // mark all multiples of 'i' as non prime    for   (  $j  =  $i  *  2  ;   $j   <  $MAX  ;   $j  =  $j  +  $i  )   {   $primes  [  $j  ]   -=   1  ;   // If i is the third prime factor of j    // then add it to result as it has at    // least three prime factors.    if   (   (  $primes  [  $j  ]   +   3  )   ==   0  )   array_push  (  $result    $j  );   }   }   }   // Sort all smart numbers    sort  (  $result  );   // return n'th smart number    return   $result  [  $n  -  1  ];   }   // Driver program to run the case    $n   =   50  ;   echo   smartNumber  (  $n  );   // This code is contributed by mits    ?>   
JavaScript
    <  script  >   // JavaScript implementation to find n'th smart number   // Limit on result   const     MAX     =     3000  ;   // Function to calculate n'th smart number   function     smartNumber  (  n  )   {      // Initialize all numbers as not prime      let     primes     =     new     Array  (  MAX  ).  fill  (  0  );      // iterate to mark all primes and smart number      let     result     =     [];      // Traverse all numbers till maximum limit      for     (  let     i  =  2  ;     i   <  MAX  ;     i  ++  )      {      // 'i' is maked as prime number because      // it is not multiple of any other prime      if     (  primes  [  i  ]     ==     0  )      {      primes  [  i  ]     =     1  ;      // mark all multiples of 'i' as non prime      for     (  let     j  =  i  *  2  ;     j   <  MAX  ;     j  =  j  +  i  )      {      primes  [  j  ]     -=     1  ;      // If i is the third prime factor of j      // then add it to result as it has at      // least three prime factors.      if     (     (  primes  [  j  ]     +     3  )     ==     0  )      result  .  push  (  j  );      }      }      }      // Sort all smart numbers      result  .  sort  ((  a    b  )=>  a  -  b  );      // return n'th smart number      return     result  [  n  -  1  ];   }   // Driver program to run the case   let     n     =     50  ;   document  .  write  (  smartNumber  (  n  ));   // This code is contributed by shinjanpatra    <  /script>   

Ausgabe:

273 

Zeitkomplexität: O(MAX)
Hilfsraum: O(MAX)

Quiz erstellen