【发布时间】:2018-07-31 13:11:48
【问题描述】:
我已经解决了seventh problem of Euler,上面写着:
通过列出前六个素数:2、3、5、7、11 和 13,我们可以 看到第 6 个素数是 13。
第 10001 个素数是多少?
我使用它解决了它,并且在我保存表兄弟的数组中,当它达到 10001 的长度时,我返回那个数字。该算法需要 1300 毫秒,我认为这非常低效,我在实现中具体做了什么?
var start = performance.now();
function eratosthenes(n) {
var arr = [2], acc = 0;
// matrix to save the found prime numbers and mark their multiples
for(var i = 3; true; i += 2) { // loop
if(arr.length === n) return arr[arr.length - 1]; // if the array length is equal to n return the last number
if(!resolve(arr, i)) { // check if is multiple of the prime numbers, already found.
arr.push(i); // if isnt multiple, save it
}
}
}
function resolve(array, n) {
return array.some(cur => !(n%cur));
}
console.log(eratosthenes(10001)); // Tooks 1300 ms
var end = performance.now();
var time = end - start;
console.log(time);
【问题讨论】:
-
你的算法不是Sieve of eratosthenes,如果实施得当,应该会有帮助。
-
不,实现不正确。也许this 可以提供帮助
-
你为什么不自己做实验呢?二进制搜索不是一个坏主意。10^6 应该是一个很好的猜测。
-
@JaromandaX Prime number theorem 我怀疑上述算法需要多长时间才能找到第 100,001 个素数
-
@J.Uchu 这个问题很简单,应该可以自己解决。提示:保持计数?
标签: javascript algorithm