Advertisement
Delfigamer

Untitled

Oct 16th, 2015
349
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.17 KB | None | 0 0
  1. #include <random>
  2. #include <vector>
  3. #include <ctime>
  4. #include <cmath>
  5. #include <cstdio>
  6.  
  7. typedef std::vector< int > intv_t;
  8.  
  9. bool isprime( intv_t* prev, int val )
  10. {
  11.     // for( int i = 2; i < val; ++i )
  12.     // {
  13.         // if( val % i == 0 )
  14.         // {
  15.             // return false;
  16.         // }
  17.     // }
  18.     for( auto it: *prev )
  19.     {
  20.         if( val % it == 0 )
  21.         {
  22.             return false;
  23.         }
  24.     }
  25.     prev->push_back( val );
  26.     return true;
  27. }
  28.  
  29. int divprod( int target )
  30. {
  31.     int result = 1;
  32.     intv_t prev;
  33.     for( int i = 2; i <= ceil( sqrt( target ) ); ++i )
  34.     {
  35.         if( target % i == 0 && isprime( &prev, i ) )
  36.         {
  37.             result *= i;
  38.         }
  39.     }
  40.     return result;
  41. }
  42.  
  43. int main( int argc, char** argv )
  44. {
  45.     static int const test[] = {
  46.         1,
  47.         2*2*2*2*5*5*5*7*7*11,
  48.         127*127,
  49.     };
  50.     for( int i = 0; i < int( sizeof( test ) / sizeof( test[ 0 ] ) ); ++i )
  51.     {
  52.         printf( "%i\t%i\n", test[ i ], divprod( test[ i ] ) );
  53.     }
  54.     int volatile* res = new int[ 100000 ];
  55.     std::mt19937 rand( 123 );
  56.     clock_t t = clock();
  57.     for( int i = 0; i < 100000; ++i )
  58.     {
  59.         int val = rand() & 0xffffff;
  60.         int dp = divprod( val );
  61.         res[ i ] = dp;
  62.     }
  63.     printf( "%f", float( clock() - t ) / CLOCKS_PER_SEC );
  64.     delete[] res;
  65.     return 0;
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement