Advertisement
ahamed210

Almost prime

Apr 10th, 2021
883
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.09 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. vector <int> primes;
  5. bool isprime[3000];
  6.  
  7. void sieve(int n)
  8. {
  9.     memset(isprime, true, sizeof(isprime));
  10.     int limit = sqrt(n+1);
  11.     isprime[0] = isprime[1] = false;
  12.     for(int i = 4; i < n; i+=2) isprime[i] = false;
  13.     primes.push_back(2);
  14.     for(int i = 3; i <= n; i+=2){
  15.         if(isprime[i]){
  16.             primes.push_back(i);
  17.             if(i <= limit){
  18.                 for(int j = i*i; j <= n; j += i*2){
  19.                     isprime[j] = false;
  20.                 }
  21.             }
  22.         }
  23.     }
  24. }
  25.  
  26. int main()
  27. {
  28.     int n, c, p = 0;
  29.     cin >> n;
  30.     if(n < 6) cout << 0 << endl;
  31.     else if(n >= 6 && n <= 10) cout << 2 << endl;
  32.     else{
  33.         sieve(n);
  34.         for(int i = 11; i <= n; i++)
  35.         {
  36.             c = 0;
  37.             for(int j = 0; j < primes.size(); j++){
  38.                 if(i%primes[j] == 0 && primes[j] <= i/2) c++;
  39.                 if(c == 2) {
  40.                     p++;
  41.                     break;
  42.                 }
  43.             }
  44.         }
  45.         cout << p+2 << endl;
  46.     }
  47.     return 0;
  48. }
  49.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement