Guest User

Untitled

a guest
Jun 22nd, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.68 KB | None | 0 0
  1. #include <iostream>
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. #define ll long long
  5. void simpleSieve(ll int limit, vector<ll int> &prime,ll int m)
  6. {
  7. bool mark[limit+1];
  8. memset(mark, true, sizeof(mark));
  9. for (ll int p=2; p*p<limit; p++)
  10. {
  11. if (mark[p] == true)
  12. {
  13. for (ll int i=p*2; i<limit; i+=p)
  14. mark[i] = false;
  15. }
  16. }
  17. for (ll int p=2; p<limit; p++)
  18. {
  19. if (mark[p] == true)
  20. {
  21. prime.push_back(p);
  22. //cout << p << " ";
  23. }
  24. }
  25. for(ll int i=0;i<prime.size();i++)
  26. {
  27. cout<<prime[i]<<" ";
  28. }
  29. }
  30. void segmentedsieve(ll int m,ll int n)
  31. {
  32. ll int limit = floor(sqrt(n))+1;
  33. vector<ll int> prime;
  34. simpleSieve(limit, prime, m);
  35. ll int low = limit;
  36. ll int high = n+1;
  37. while (low < (n))
  38. {
  39. if (high >= (n))
  40. high = (n);
  41. bool mark[limit+1];
  42. memset(mark, true, sizeof(mark));
  43. for (ll int i = 0; i < prime.size(); i++)
  44. {
  45. ll int loLim = floor(low/prime[i]) * prime[i];
  46. cout<<loLim;
  47. if (loLim < low)
  48. loLim += prime[i];
  49. /* if(i==(prime.size()-1))
  50. {cout<<loLim<<" h"<<high;}
  51. */
  52. for (ll int j=loLim; j<high; j+=prime[i])
  53. mark[j-low] = false;
  54. }
  55. for (ll int i = low; i<high; i++)
  56. if (mark[i - low] == true)
  57. cout << i << " ";
  58.  
  59. low = low + limit;
  60. high = high + limit;
  61. }
  62. }
  63. int main() {
  64. //ll int m=10000100000;
  65. ll int t,m,n;
  66. cin>>t;
  67. while(t--)
  68. {
  69. cin>>m>>n;
  70. segmentedsieve(m,n);
  71. }
  72. //cout<<m;
  73. }
Add Comment
Please, Sign In to add comment