göre, ... bir bitset uygulanması (örneğin https://github.com/tdegrunt/bitset) için
bak her sayı test etmek için sadece bir bit gerekir. Bu, bit'leri ayarladığınız sırada dinamik olarak büyüyecektir. Biti kurabilir ve alabilirsiniz ve her bit size n
'un bir öncelik olup olmadığını söyleyecektir.
Ancak, ben Aslında ... bu yavaş olacaktır çünkü ... max 100 değil, 2^32 ile sınamak
tavsiye benim Mac 10M ve 100M arasındaki bitset sonları. Sanırım bayt dizisi kullanmıyorlar.
kahve komut dosyasında
daha az ayrıntılı çünkü ...
Bitset = require 'bitset'
sieve = (maxSize)=>
mark = (bitset)->
markMultiplesOf = (n)->
bitset.set(n*each) for each in [2..(maxSize/n)]
markMultiplesOf each for each in [2..(maxSize/2)] when bitset.get(each) is false
showPrimes = (bitset)->
console.log each for each in [0..(bitset.length())] when bitset.get(each) is false
timestamp = Date.now()
bitset = new Bitset(maxSize)
mark bitset, maxSize
console.log "took #{Date.now() - timestamp} ms"
showPrimes(bitset)
sieve(10000000) # takes < 4s
kullanımı yerine seyrek diziler nesne. – dandavis
Bu 4 milyar elementtir. Neden bu boyuta ihtiyacın var? – Andy
Yine de, 4294967295 yerine ((2^32) - 1) deneyin. – Andy