A prime number is an integer greater than 1 whose only whole-number divisors are 1 and itself — 2, 3, 5, 7, 11 and so on. You will build two functions on one object, primeSieve = { isPrime, sieve }: isPrime(n) decides whether a single number is prime, and sieve(n) returns every prime up to n using the Sieve of Eratosthenes, an ancient method that finds all the primes in a range by repeatedly crossing out multiples. See prime number for background.
primeSieve.isPrime(n) // integer -> boolean: is n prime?
primeSieve.sieve(n) // integer -> number[]: all primes <= n, ascending
primeSieve.isPrime(2); // true
primeSieve.isPrime(1); // false (1 is not prime)
primeSieve.isPrime(97); // true
primeSieve.isPrime(100); // false (100 = 2 * 2 * 5 * 5)
primeSieve.sieve(10); // [2, 3, 5, 7]
primeSieve.sieve(30); // [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
primeSieve.sieve(1); // [] (there are no primes below 2)
isPrime returns false for 0, for 1, and for every negative number.n has a divisor larger than its square root, it also has a matching one that is smaller, so you never need to look past the square root of n.sieve(n) includes n itself when n is prime (so sieve(7) ends with 7), and returns [] for any n below 2.