如何查找数组中的任何元素是否不同于 JavaScript 中的 2、3 和 5?
How to find if any element within an array is different than 2, 3 and 5 in JavaScript?
目标是判断输入的数是否为海明数?!汉明数是因式分解后仅包含质数 2、3 和 5 的所有数。如果因式分解的数包含与 2、3 和 5 中的任何一个不同的任何数,则不是汉明数。所以我找到了如何分解每个数字输入,并且因子形成一个数组。我想设置条件是否有任何因素不同于 2、3 或 5,以便能够从潜在的汉明数列表中排除该数字!
将每个数字因式分解为质因数的代码是:
function getAllFactorsFor(remainder) {
var factors = [], i;
for (i = 2; i <= remainder; i++) {
while ((remainder % i) === 0) {
factors.push(i);
remainder /= i;
}
}
return factors;
}
现在我需要设置条件以从这个新形成的数组中排除所有包含不同于 2、3 和 5 的质因数的数字!
您可以使用 every
命令来检查是否存在所有需要的因素:
function getAllFactorsFor(remainder) {
var factors = [], i;
for (i = 2; i <= remainder; i++) {
while ((remainder % i) === 0) {
factors.push(i);
remainder /= i;
}
}
return factors;
}
for(let i = 0; i < 20; i++) {
if(getAllFactorsFor(i).every(f => [2, 3, 5].includes(f)))
console.log(`${i} is a Hamming number`);
else
console.log(`${i} is not a Hamming number`);
}
您可以使用Array.filter with Array.every,例如:
const output = factors.filter(factor => [2,3,5].every(num => num !== factor))
您可以使用 .some()
,或更准确地说 !f.some(x => x > 5)
或在文本中:如果没有找到大于 5 的因子,则为真。
function getAllFactorsFor(remainder) {
var factors = [], i;
for (i = 2; i <= remainder; i++) {
while ((remainder % i) === 0) {
factors.push(i);
remainder /= i;
}
}
return factors;
}
for (var num = 30; num <= 40; num++) {
var f = getAllFactorsFor(num);
console.log(num + " has factors: " + f.toString() + ". Hamming number: " + !f.some(x => x > 5))
}
我结合了不同的建议并进行了谷歌搜索,然后来到我的解决方案版本以检查输入的数字是否为汉明数:
代码:
function getAllFactorsFor(remainder) {
var factors = [], i;
for (i = 2; i <= remainder; i++) {
while ((remainder % i) === 0) {
factors.push(i);
remainder /= i;
}
}
return factors;
}
function isHamming(remainder){
if(getAllFactorsFor(remainder).every(f => [2, 3, 5].includes(f))){
return true;
}else{
return false;
}
}
目标是判断输入的数是否为海明数?!汉明数是因式分解后仅包含质数 2、3 和 5 的所有数。如果因式分解的数包含与 2、3 和 5 中的任何一个不同的任何数,则不是汉明数。所以我找到了如何分解每个数字输入,并且因子形成一个数组。我想设置条件是否有任何因素不同于 2、3 或 5,以便能够从潜在的汉明数列表中排除该数字!
将每个数字因式分解为质因数的代码是:
function getAllFactorsFor(remainder) {
var factors = [], i;
for (i = 2; i <= remainder; i++) {
while ((remainder % i) === 0) {
factors.push(i);
remainder /= i;
}
}
return factors;
}
现在我需要设置条件以从这个新形成的数组中排除所有包含不同于 2、3 和 5 的质因数的数字!
您可以使用 every
命令来检查是否存在所有需要的因素:
function getAllFactorsFor(remainder) {
var factors = [], i;
for (i = 2; i <= remainder; i++) {
while ((remainder % i) === 0) {
factors.push(i);
remainder /= i;
}
}
return factors;
}
for(let i = 0; i < 20; i++) {
if(getAllFactorsFor(i).every(f => [2, 3, 5].includes(f)))
console.log(`${i} is a Hamming number`);
else
console.log(`${i} is not a Hamming number`);
}
您可以使用Array.filter with Array.every,例如:
const output = factors.filter(factor => [2,3,5].every(num => num !== factor))
您可以使用 .some()
,或更准确地说 !f.some(x => x > 5)
或在文本中:如果没有找到大于 5 的因子,则为真。
function getAllFactorsFor(remainder) {
var factors = [], i;
for (i = 2; i <= remainder; i++) {
while ((remainder % i) === 0) {
factors.push(i);
remainder /= i;
}
}
return factors;
}
for (var num = 30; num <= 40; num++) {
var f = getAllFactorsFor(num);
console.log(num + " has factors: " + f.toString() + ". Hamming number: " + !f.some(x => x > 5))
}
我结合了不同的建议并进行了谷歌搜索,然后来到我的解决方案版本以检查输入的数字是否为汉明数:
代码:
function getAllFactorsFor(remainder) {
var factors = [], i;
for (i = 2; i <= remainder; i++) {
while ((remainder % i) === 0) {
factors.push(i);
remainder /= i;
}
}
return factors;
}
function isHamming(remainder){
if(getAllFactorsFor(remainder).every(f => [2, 3, 5].includes(f))){
return true;
}else{
return false;
}
}