【问题标题】:Trying to find if numbers are odd/even/composite/prime试图找出数字是否是奇数/偶数/复合/素数
【发布时间】:2016-07-27 18:09:21
【问题描述】:

我有以下数字数组:

var array = [5,9,12,19,23,24,31,44,49,62];

我试图找出每一个它们是偶数和合数、奇数和合数,还是奇数和素数。我首先试图找到偶数和合数:

for (i = 0; i < array.length; i++) {
    if (array[i]%2 === 0 && array[i]%i === 0) {
        console.log(array[i]+" is even and composite")
    }
}   

问题是当我应该得到 12、24、44、62 时,我只得到 12。它似乎停在 12 点。可能是什么问题?

谢谢。

【问题讨论】:

  • 比较array[i]%i === 0不是检查array[i]是否是合数,而是检查array[i]是否能被i整除。对于 24、44 和 62 的情况,它们不会使您的条件为真,因为 24 不能被 5 整除,44 不能被 7 整除,62 不能被 8 整除。您需要重新制定条件以检查一个数是否是合数。
  • 好吧,12 也不能被 5 整除,但它仍然以某种方式显示出来。
  • 在计算 12 时,i 的值为 2,12 可以被 12 整除。澄清一下,您的条件当前检查一个数字是否为偶数(可被 2 整除)并且可被其在数组中的索引整除。

标签: javascript arrays primes composite


【解决方案1】:

您可以将每个问题作为一个函数来解决,以使其更容易。

例如:查找数组中的偶数

function isEven(n) {
   return (n % 2) === 0  //to get even numbers
}

function isOdd(n) {
   return (n % 2) === 1  //to get odd numbers
}

然后编写另一个函数来检查合数和素数。如果我为你做所有的工作,那将不会很有趣。

function isComposite(n) {
   //Enter check for composite numbers here
}

function isPrime(n) {
   //Enter check for prime numbers here
}

然后要获取数组中的偶数,如果您不知道它是什么,您可以简单地使用过滤器方法来传递您预先编写的测试函数作为参数的数组。但基本上它检查数组中的每个元素是否通过测试,然后从中创建另一个函数。

array.filter(isEven) // This would create a new array of all the even numbers in your array

您还可以链接函数调用以查找偶数和合数。

array.filter(isEven).filter(isComposite)  //would give you all the even and composite numbers in your array

【讨论】:

    猜你喜欢
    • 2015-03-03
    • 2011-11-12
    • 2015-05-31
    • 2015-02-13
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多