Advertisement
_Muhammad

NOD

Oct 29th, 2020
770
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.99 KB | None | 0 0
  1.  
  2. const int MX = 1e6+123;
  3. bitset<MX> is_prime;
  4. vector<int> prime;
  5.  
  6. void primeGen ( int n )
  7. {
  8.     n += 100;
  9.     for ( int i = 3; i <= n; i += 2 ) is_prime[i] = 1;
  10.  
  11.     int sq = sqrt ( n );
  12.     for ( int i = 3; i <= sq; i += 2 ) {
  13.         if ( is_prime[i] == 1 ) {
  14.             for ( int j = i*i; j <= n; j += ( i + i ) ) {
  15.                 is_prime[j] = 0;
  16.             }
  17.         }
  18.     }
  19.  
  20.     is_prime[2] = 1;
  21.     prime.push_back (2);
  22.  
  23.     for ( int i = 3; i <= n; i += 2 ) {
  24.         if ( is_prime[i] == 1 ) prime.push_back ( i );
  25.     }
  26. }
  27.  
  28.  
  29. int NOD (long long n) // 60
  30. {
  31.     int ret = 1;
  32.     for ( auto p : prime ) { // p = 5
  33.         if ( 1LL * p * p > n ) break;
  34.  
  35.         if ( n % p == 0 ) {
  36.             int cnt = 1;
  37.  
  38.             while ( n % p == 0 ) { // n = 5
  39.                 n /= p; // n = 5;
  40.                 cnt++; // 2
  41.             }
  42.  
  43.             ret *= cnt; // 1 * 3 * 2
  44.         }
  45.     }
  46.  
  47.     if ( n > 1 ) ret *= 2; // 1 * 3 * 2  * 2 = 12
  48.  
  49.     return ret;
  50. }
  51.  
  52.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement