Discuss
/
JavaScript
/
交作业,相对执行次数较少的一种处理方案
交作业,相对执行次数较少的一种处理方案
Topic source改进
results = arr.filter(function (x) {
for (let start = 2, end = x; end > start; start++) {
if (x % start === 0) {
return true
}
end = x / start - 1
if (x % end === 0) {
return true
}
}
return false
})
。。。好想撤销呀,写反了,还漏了个条件
results = arr.filter(function (x) {
if (x < 2) {
return false
}
for (let start = 2, end = x; end > start; start++) {
if (x % start === 0) {
return false
}
end = x / start - 1
if (end > start && x % end === 0) {
return false
}
}
return true
})
感觉还是这样更好,少做很多无用功
results = arr.filter(function (x) {
if (x < 2) {
return false
}
for (let start = 2, end = Math.sqrt(x); start <= end; start++) {
if (x % start === 0) {
return false
}
}
return true
})
参考网上资料:
results = arr.filter(function (x) { // 求素数
if (![1, 5].includes(x % 6) && ![2, 3].includes(x)) {
return false // 只有形如 6n-1 和 6n+1 的自然数可能是素数
}
for (let start = 2, end = Math.sqrt(x); start <= end; start++) {
if (x % start === 0) {
return false
}
}
return x !== 1
})
埃拉托斯特尼算法
let getPrimeNum = function (arr) {
let max = arr.reduce((a, b) => Math.max(a, b), 0) // 获取数组中最大值
let primeNums = []
function isPrime(num) { // 用已有的素数判断新元素是否为素数
for (var primeNum of primeNums) {
if (num % primeNum === 0) {
return false
}
}
return true
}
for (let num = 2; num <= max; num++) {
if (isPrime(num)) {
primeNums[primeNums.length] = num
}
}
return arr.filter((x) => primeNums.includes(x))
}
arr = getPrimeNum(arr)
- 1
忒修斯之船
此处只给出函数内部定义