【发布时间】:2018-06-01 15:12:34
【问题描述】:
我正在尝试解决教育网站平台上的问题。 这是任务/问题:
编写一个程序,找出并打印出最大的素数
<= N。输入
在第一行,您将收到数字 N
输出
打印最大的质数
约束
2
示例
如果
N=13,那么最大的素数也是13。如果
N=126,那么最大的素数也是113。如果
N=26,那么最大的素数也是23
这是我的代码,工作正常,但系统不接受它完全正确,因为我的代码很慢/超过了内存限制:
const inputnumber = theNumberN; // Comes dymanically from the system
function getPrimes(max) {
let sieve = [];
let primes = [];
for (let i = 2; i <= max; ++i) {
if (!sieve[i]) {
primes.push(i);
for (let j = i << 1; j <= max; j += i) {
sieve[j] = true;
}
}
}
return primes;
}
let result = getPrimes(inputnumber);
let biggest = Math.max(...result);
console.log(biggest);
那么,如何解决呢? 你能提供更快的逻辑/算法吗
【问题讨论】:
-
与其维护一个素数数组,不如只保留迄今为止发现的最大素数。这样做会占用更少的内存,并且不必对找到的所有素数进行最终迭代。
-
如何反转 for 循环,从最大值开始,一直到 2 并在遇到质数时立即突破?
-
@ReverendDovie 他正在尝试实施埃拉托色尼筛法,这需要完善。
-
j <= max可以是j <= Math.sqrt(max)
标签: javascript