Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <random>
- #include <vector>
- #include <ctime>
- #include <cmath>
- #include <cstdio>
- typedef std::vector< int > intv_t;
- bool isprime( intv_t* prev, int val )
- {
- // for( int i = 2; i < val; ++i )
- // {
- // if( val % i == 0 )
- // {
- // return false;
- // }
- // }
- for( auto it: *prev )
- {
- if( val % it == 0 )
- {
- return false;
- }
- }
- prev->push_back( val );
- return true;
- }
- int divprod( int target )
- {
- int result = 1;
- intv_t prev;
- for( int i = 2; i <= ceil( sqrt( target ) ); ++i )
- {
- if( target % i == 0 && isprime( &prev, i ) )
- {
- result *= i;
- }
- }
- return result;
- }
- int main( int argc, char** argv )
- {
- static int const test[] = {
- 1,
- 2*2*2*2*5*5*5*7*7*11,
- 127*127,
- };
- for( int i = 0; i < int( sizeof( test ) / sizeof( test[ 0 ] ) ); ++i )
- {
- printf( "%i\t%i\n", test[ i ], divprod( test[ i ] ) );
- }
- int volatile* res = new int[ 100000 ];
- std::mt19937 rand( 123 );
- clock_t t = clock();
- for( int i = 0; i < 100000; ++i )
- {
- int val = rand() & 0xffffff;
- int dp = divprod( val );
- res[ i ] = dp;
- }
- printf( "%f", float( clock() - t ) / CLOCKS_PER_SEC );
- delete[] res;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement