Guest User

Untitled

a guest
Oct 19th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.07 KB | None | 0 0
  1. /*
  2. * Sieve of Eratosthenes
  3. *
  4. * Generates array of prime numbers up to n
  5. * Runs in O(n log log n) time and O(n) space
  6. */
  7. function genPrimesTo(n) {
  8. let flags = [];
  9. for (let i = 0; i <= n; i++) {
  10. if (i > 1) {
  11. flags.push(true);
  12. } else {
  13. flags.push(false);
  14. }
  15. }
  16.  
  17. let prime = 2;
  18. let generatedPrimes = [];
  19. while (prime <= Math.sqrt(n)) {
  20. flag(flags, prime);
  21. prime = getNextPrime(flags, prime);
  22. }
  23.  
  24. flags.forEach((val, i) => {
  25. if (val) {
  26. generatedPrimes.push(i);
  27. }
  28. });
  29.  
  30. return generatedPrimes;
  31. }
  32.  
  33. function flag(flags, prime) {
  34. for (let i = prime*prime; i < flags.length; i += prime) {
  35. flags[i] = false;
  36. }
  37. }
  38.  
  39. function getNextPrime(flags, prime) {
  40. let next = prime + 1;
  41. while (next < flags.length && !flags[next]) {
  42. next += 1;
  43. }
  44. return next;
  45. }
  46.  
  47. /*
  48. * Determines num's primality by checking divisibility of primes up to sqrt(num)
  49. */
  50. function isPrime(num) {
  51. if (num <= 2) return true;
  52. const primes = genPrimesTo(Math.sqrt(num));
  53. for (let p of primes) {
  54. if (num % p === 0) return false;
  55. }
  56. return true;
  57. }
Add Comment
Please, Sign In to add comment