Advertisement
Guest User

primos

a guest
Feb 20th, 2020
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.82 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int max = 100010;
  4. int eh_primo[12010000];
  5. vector<int> arr;
  6. void crivo(int n){
  7.     for (int i = 2; i <= n; i++){
  8.         eh_primo[i] = -1;
  9.     }
  10.     for(int i = 2; i <= n; i++){
  11.         if(eh_primo[i] == -1){
  12.             eh_primo[i] = i;
  13.             for (int j = i+i; j <= n; j += i){
  14.                 eh_primo[j] = 0;
  15.             }
  16.         }
  17.     }
  18. }
  19. int busca_bin(int prim){
  20.     int ini = 0, fim = (arr.size()), meio;
  21.     while(ini <= fim){
  22.         meio = (ini+fim)/2;
  23.         if(arr[meio] == prim) return meio;
  24.         if(arr[meio] > prim) fim = meio -1;
  25.         if(arr[meio] < prim) ini = meio + 1;
  26.     }
  27.     return -1;
  28. }
  29. int main(){
  30.     int n, prim;
  31.     cin >> n;
  32.     crivo(12000000);
  33.     for(int i = 1; i <= 12000000; i++){
  34.         if(eh_primo[i] != 0) arr.emplace_back(eh_primo[i]);
  35.     }
  36.     while(n--){
  37.         cin >> prim;
  38.         cout << (busca_bin(prim)+1) << endl;
  39.     }
  40.     return 0;
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement