arif334

Sieve Prime & Prime Factorization

Feb 7th, 2023
1,880
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.10 KB | None | 0 0
  1. /*
  2.  1. Finding primes with sieve method
  3.  2. Prime factorization
  4.  * */
  5. #include <bits/stdc++.h>
  6. using namespace std;
  7.  
  8. #define N 1000005
  9.  
  10. bool num[N];
  11. int primes[N];
  12. int total = 0;
  13. int divisors[500];
  14. int ndiv;
  15.  
  16. void sieve()
  17. {
  18.     int i, j, k;
  19.    
  20.     memset(num, true, sizeof(num));
  21.     num[0] = num[1] = false;   
  22.     for(i = 4; i < N; i+= 2) num[i] = false;
  23.    
  24.     for(i = 3; i < N; i += 2) {
  25.         if(num[i]) {
  26.             k = i;
  27.             while(k+i < N) {
  28.                 k += i;
  29.                 num[k] = false;
  30.             }
  31.         }
  32.     }
  33. }
  34.  
  35. void store()
  36. {
  37.     for(int i = 2; i < N; i++)
  38.         if(num[i]) primes[total++] = i;
  39. }
  40.  
  41. void prime_factorize(int n) // O(log n)
  42. {
  43.     ndiv = 0;
  44.     for(int i = 0, j = sqrt(n); primes[i] <= j; i++) {
  45.         if(n % primes[i] == 0) {
  46.             while(n % primes[i] == 0) {
  47.                 n /= primes[i];
  48.                 divisors[ndiv++] = primes[i];
  49.             }
  50.             j = sqrt(n);
  51.         }
  52.     }
  53.    
  54.     if(n > 1) // n is prime
  55.         divisors[ndiv++] = n;
  56. }
  57.  
  58.  
  59. int main()
  60. {
  61.     sieve();
  62.     store();
  63.    
  64.     //for(int i = 0; i < 100; i++)
  65.         //cout << primes[i] << " ";
  66.        
  67.     int n = 150;
  68.     prime_factorize(n);
  69.     for(int i = 0; i < ndiv; i++)
  70.         cout << divisors[i] << " ";
  71.        
  72.     return 0;
  73. }
  74.  
Advertisement
Add Comment
Please, Sign In to add comment