我一直在应对编码挑战。说明如下:
“创建无穷无尽的质数流-有点像IntStream.of(2,3,5,7,11,13,17),但是是无限的(很好,很长)。流必须能够在几秒钟内产生2500万个素数“”
我的代码生成质数,但速度不够快;它保持超时。我希望有人能够为我提供一些有关如何优化解决方案或找到更好解决方案的指导。我的代码如下。这是我一段时间以来第一次在此发布信息,因此,如果我需要做其他更改或需要澄清,请告诉我。谢谢。
class Primes {
static * stream() {
yield 2;
let n = 3;
while (n < 15486042) {
if (isPrime(n)) {yield n}
n += 2;
}
}
}
function isPrime(n) {
for (let a = 3; a <= ~~Math.sqrt(n); a+=2) {
if (n%a == 0) return false;
}
return true;
}
如注释中所建议的rossum,可以使用Sieve of Eratosthenes