Advertisement
saurav_kalsoor

Sieve

Jun 1st, 2021
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.51 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define ll long long
  3. #define MOD 1000000007
  4. #define endl '\n'
  5. #define N 10000110
  6.  
  7. using namespace std;
  8.  
  9. ll lp[N+1];
  10. vector<ll> pr;
  11.  
  12. void sieve(){
  13. for (ll i=2; i<=N; ++i) {
  14. if (lp[i] == 0) {
  15. lp[i] = i;
  16. pr.push_back (i);
  17. }
  18. for (ll j=0; j<(ll)pr.size() && pr[j]<=lp[i] && i*pr[j]<=N; ++j)
  19. lp[i * pr[j]] = pr[j];
  20. }
  21. }
  22.  
  23. int higher(ll x){
  24. int lo = 0, hi = (int)pr.size(), res = -1;
  25. while(lo <= hi){
  26. int mid = lo + (hi - lo)/2;
  27. if(pr[mid] > x){
  28. res = mid;
  29. hi = mid-1;
  30. }else if(pr[mid] < x){
  31. lo = mid+1;
  32. }else{
  33. return mid;
  34. }
  35. }
  36. return res;
  37. }
  38.  
  39. int lower(ll x){
  40. int lo = 0, hi = (int)pr.size(), res = -1;
  41. while(lo <= hi){
  42. int mid = lo + (hi - lo)/2;
  43. if(pr[mid] > x){
  44. hi = mid-1;
  45. }else if(pr[mid] < x){
  46. res = mid;
  47. lo = mid+1;
  48. }else{
  49. return mid;
  50. }
  51. }
  52. return res;
  53. }
  54.  
  55.  
  56. void solve(){
  57. ll n;
  58. cin>>n;
  59. if(n == 2){
  60. cout<<1<<endl;
  61. return;
  62. }
  63.  
  64. ll num = n/2 + 1;
  65. int lo = lower(n);
  66. int hi = higher(num);
  67. if(hi == 0)
  68. hi++;
  69.  
  70. ll res = lo - hi + 2;
  71. cout<<res<<endl;
  72.  
  73. }
  74.  
  75. signed main() {
  76. ios_base::sync_with_stdio(false);
  77. cin.tie(NULL);
  78. sieve();
  79. int t;
  80. cin>>t;
  81. while(t--)
  82. solve();
  83. }
  84.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement