#include <iostream>
#include <cmath>
#include <vector>
std::vector<std::size_t> prime_numbers_till( std::size_t ubound )
{
std::vector<bool> sieve( ubound, true ) ;
for( std::size_t i = 2 ; i < ubound ; ++i )
if( sieve[i] )
for( auto j = i*i ; j < ubound ; j += i ) sieve[j] = false ;
std::vector<std::size_t> primes( 1, 2 ) ;
for( std::size_t i = 3 ; i < ubound ; i += 2 ) if( sieve[i] ) primes.push_back(i) ;
return primes ;
}
std::vector<long long> prime_factors_of( long long n )
{
if( n < 0 ) return prime_factors_of(-n) ;
std::vector<long long> factors ;
for( int p : prime_numbers_till( std::sqrt(n) + 2 ) ) while( n%p == 0 )
{
factors.push_back(p) ;
n /= p ;
if( n == 1 ) break ;
}
if( n > 1 ) factors.push_back(n) ;
return factors ;
}
int main()
{
const long long n = 2LL * 19*19*19*19*19 * 41*41 * 1151 * 2239 ;