Esempio n. 1
0
/*******************************************************************************************************************//**
 * \brief   Gets all devisors of a number n.
 *
 * Computes all unique products of n's prime factors.
 *
 * \param   n  The number the devisors are computed for.
 *
 * \pre     n > 0
 *
 * \return  A set of the devisors including 1 and n
 **********************************************************************************************************************/
std::set<uint_t> getDevisors( const uint_t n )
{
   if( n == uint_t(0) )
      return std::set<uint_t>();

   std::vector<uint_t> factors = getPrimeFactors( n );

   std::set<uint_t> devisors;
   std::vector<uint_t> tmpDevisors;

   devisors.insert( uint_t(1) );
   tmpDevisors.reserve( ( size_t(1) << factors.size() ) - size_t(1) );

   for( auto fIt = factors.begin(); fIt != factors.end(); ++fIt )
   {
      tmpDevisors.clear();
      for(auto pIt = devisors.begin(); pIt != devisors.end(); ++pIt)
      {
         tmpDevisors.push_back( *pIt * *fIt );
      }
      devisors.insert( tmpDevisors.begin(), tmpDevisors.end() );
   }

   return devisors;
}
Esempio n. 2
0
void printPrimeFactors(uint64_t num) {
    std::vector<std::pair<uint64_t,uint64_t> > factors = getPrimeFactors(num);

    for (uint32_t idx = 0; idx < factors.size(); ++idx) {
        std::cout << factors[idx].first << " ^ " << factors[idx].second << std::endl;
    }
}