Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Ok, this is my take on it. Hope it might be of use (EDIT: not to provoke "don't use leading underscore" comments - added a namespace). EDIT #2: Added a faster function <code>get_factor_prime_faster()</code> with a helper function. See notes about the speed tests in the end. </p> <pre><code>#include &lt;cstdint&gt; #include &lt;iostream&gt; namespace so { // Head-on approach: get_factor_prime() std::uint64_t get_factor_prime( std::uint64_t _number ) { for( std::uint64_t i_ = 2; i_ * i_ &lt;= _number; ++i_ ) if( _number % i_ == 0 ) return ( get_factor_prime( _number / i_ ) ); return ( _number ); } // Slightly improved approach: get_factor_prime_faster() and detail::get_factor_prime_odd() namespace detail { std::uint64_t get_factor_prime_odd( std::uint64_t _number ) { for( std::uint64_t i_ = 3; i_ * i_ &lt;= _number; i_ += 2 ) if( _number % i_ == 0 ) return ( get_factor_prime_odd( _number / i_ ) ); return ( _number ); } } // namespace so::detail std::uint64_t get_factor_prime_faster( std::uint64_t _number ) { while( _number % 2 == 0 ) _number /= 2; return ( detail::get_factor_prime_odd( _number ) ); } } // namespace so int main() { std::cout &lt;&lt; so::get_factor_prime( 600851475143 ) &lt;&lt; std::endl; std::cout &lt;&lt; so::get_factor_prime( 13195 ) &lt;&lt; std::endl; std::cout &lt;&lt; so::get_factor_prime( 101 ) &lt;&lt; std::endl; std::cout &lt;&lt; so::get_factor_prime_faster( 600851475143 ) &lt;&lt; std::endl; std::cout &lt;&lt; so::get_factor_prime_faster( 13195 ) &lt;&lt; std::endl; std::cout &lt;&lt; so::get_factor_prime_faster( 101 ) &lt;&lt; std::endl; return( 0 ); } </code></pre> <p>Program output:</p> <pre><code>6857 29 101 6857 29 101 </code></pre> <p>Admittedly, I still cannot figure out how to check easily if a number is a prime...</p> <p>EDIT: Tested in a loop for <code>600851475143 * 1024</code> number, GCC 4.7.2 with -O3, Linux, Intel i5 Core. Times are as follows (approximately):</p> <p><code>get_factor_prime</code> is <code>3</code> times faster than OP's solution;</p> <p><code>get_factor_prime_faster</code> is <code>6</code> times faster than OP's solution.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload