BotByte

Bitwise Sieve.cpp

Feb 6th, 2018
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.75 KB | None | 0 0
  1. /* Bitwise Sieve */
  2. /* Source : Shafayet's Planet */
  3.  
  4. #include <bits/stdc++.h>
  5.  
  6. using namespace std;
  7.  
  8. #define MAXN 3000008
  9. int prime[MAXN/32];
  10.  
  11. bool check(int n, int pos)
  12. {
  13.     return (1<<pos) & n;
  14. }
  15.  
  16. int sets(int n, int pos)
  17. {
  18.     return n = n | (1<<pos);
  19. }
  20.  
  21. void sieve()
  22. {
  23.     int sqrtn = sqrt(MAXN);
  24.     prime[1/32] = sets(prime[1/32], 1%32); // prime[1] = false;
  25.     for(int i=2; i<=sqrtn; i++){
  26.         if(check(prime[i/32], i%32) == 0){
  27.             for(int j=i*i; j<MAXN; j+=i){
  28.                 prime[j/32] = sets(prime[j/32], j%32);
  29.             }
  30.         }
  31.     }
  32. }
  33.  
  34. int main()
  35. {
  36.     sieve();
  37.     for(int i=1; i<100; i++){
  38.         if(check(prime[i/32], i%32) == 0){
  39.             cout << i << endl;
  40.         }
  41.     }
  42. }
Advertisement
Add Comment
Please, Sign In to add comment