Advertisement
matheus_monteiro

prime numbers

Apr 30th, 2024 (edited)
716
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.18 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. vector<int> leastPrimceFactor;
  6. vector<int> primes;
  7.  
  8. void sieve(int n) { // O(N)
  9.     leastPrimceFactor.resize(n + 1, 0);
  10.     for(int i = 2; i <= n; ++i) {
  11.         if (leastPrimceFactor[i] == 0) {
  12.             leastPrimceFactor[i] = i;
  13.             primes.push_back(i);
  14.         }
  15.         for (int j = 0; i * primes[j] <= n; ++j) {
  16.             leastPrimceFactor[i * primes[j]] = primes[j];
  17.             if (primes[j] == leastPrimceFactor[i]) {
  18.                 break;
  19.             }
  20.         }
  21.     }
  22. }
  23.  
  24. bool isPrime(int n) { // O( sqrt(N) / ln(sqrt(N))) -> tests only primes smaller than sqrt(N)
  25.     if(n == 2) return true;
  26.     if(n < 2 || (n % 2 == 0)) return false;
  27.     if(n < leastPrimceFactor.size()) return leastPrimceFactor[n] == n;
  28.  
  29.     int index = 0;
  30.  
  31.     while(primes[index] * primes[index] <= n) {
  32.         if((n % primes[index]) == 0)
  33.             return false;
  34.         index++;
  35.     }
  36.  
  37.     return true;
  38. }
  39.  
  40. int main() {
  41.     int L = 5;
  42.     int R = 12;
  43.  
  44.     sieve(sqrt(R) + 1);
  45.  
  46.     while(L <= R) {
  47.         if(isPrime(L))
  48.             cout << L << ' ';
  49.         ++L;
  50.     }
  51.     cout << endl;
  52.    
  53.     return 0;
  54. }  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement