Initial data commit

This commit is contained in:
Ingy döt Net 2023-07-01 11:58:00 -04:00
parent 72d218235f
commit f23f22d71c
199087 changed files with 3378941 additions and 0 deletions

View file

@ -0,0 +1,36 @@
primes = () ->
yield 2
yield 3
sieve = ([] for i in [1..3])
sieve[0].push 3
[r, s] = [3, 9]
pos = 1
n = 5
loop
isPrime = true
if sieve[pos].length > 0 # this entry has a list of factors
isPrime = false
sieve[(pos + m) % sieve.length].push m for m in sieve[pos]
sieve[pos] = []
if n is s # n is the next square
if isPrime
isPrime = false # r divides n, so not actually prime
sieve[(pos + r) % sieve.length].push r # however, r is prime
r += 2
s = r*r
yield n if isPrime
n += 2
pos += 1
if pos is sieve.length
sieve.push [] # array size must exceed largest prime found
sieve.push [] # adding two entries keeps size = O(sqrt n)
pos = 0
undefined # prevent CoffeeScript from aggregating values
module.exports = {
primes
}

View file

@ -0,0 +1,26 @@
primes = require('sieve').primes
gen = primes()
console.log "The first 20 primes: #{gen.next().value for _ in [1..20]}"
p100_150 = (while (p = gen.next().value) < 150 then p).filter (n) -> n > 100
console.log "The primes between 100 and 150: #{p100_150}"
while gen.next().value < 7700
undefined
count = 1
while gen.next().value < 8000
++count
console.log "There are #{count} primes between 7,700 and 8,000."
n = 10
c = 0
gen = primes()
loop
p = gen.next().value
c += 1
if c is n
console.log "The #{n}th prime is #{p}"
break if n is 10_000_000
n *= 10