Advertisement
Guest User

Untitled

a guest
Mar 27th, 2017
31
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.90 KB | None | 0 0
  1. #include <cmath>
  2. #include <cstdint>
  3. #include <iostream>
  4. #include <valarray>
  5.  
  6. int main(int argc, char** argv)
  7. {
  8. std::ios_base::sync_with_stdio(false);
  9.  
  10. if (argc == 1) {
  11. std::cout << "Usage: " << *argv << " [number]\n" <<
  12. "[number] is a positive number." << std::endl;
  13. return 1;
  14. }
  15.  
  16. const std::uintmax_t limit {std::stoull(argv[1])}; // get search limit.
  17. if (limit <= 1) return 0;
  18.  
  19. std::valarray<bool> prims(true, limit + 1); // array of [0] to [limit]
  20. prims[std::slice(0, 2, 1)] = false; // 0 and 1 aren't primes. (not needed)
  21.  
  22. const std::uintmax_t search_limit {static_cast<std::uintmax_t>(std::floor(std::sqrt(static_cast<long double>(limit)))) + 1};
  23. for (std::uintmax_t i {2}; i < search_limit; ++i)
  24. if (prims[i])
  25. prims[std::slice(i*i, limit / i - (i - 1), i)] = false;
  26.  
  27. for (std::uintmax_t i {2}; i <= limit; ++i)
  28. if (prims[i])
  29. std::cout << i << '\n';
  30. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement