【发布时间】:2013-06-20 08:30:20
【问题描述】:
function getPrimes(max) {
var sieve = [], i, j, primes = [];
for (i = 2; i <= max; ++i) {
if (!sieve[i]) {
// i has not been marked -- it is prime
primes.push(i);
for (j = i << 1; j <= max; j += i) {
sieve[j] = true;
}
}
}
return primes;
}
我知道i 会跟踪所有数字。
我不明白...!sieve[i],j = i << 1; 以及到底发生了什么。
只是为了清楚..素数是只能被它自己或被一整除的东西。
【问题讨论】:
-
<<operator 是按位左移。移动1将乘以2,所以j = i * 2会做同样的事情。 -
呃,“右移而不是乘以二”的东西。在最坏的情况下过早优化。 (而且完全没有意义,因为任何有价值的编译器/解释器都会自动执行此操作。)
-
我没有写这个是啊哈哈
-
在讨论乘以 2 和使用按位左移之间的区别时,这里还有另一个潜在的错误。按位左移运算符产生带符号的 32 位结果 (ecma-international.org/ecma-262/5.1/#sec-11.7.1)。默认情况下,乘法会产生双精度 (ecma-international.org/ecma-262/5.1/#sec-11.5.1)
标签: javascript algorithm primes