为什么我只得到2和3为假? (如果number为prime,则返回true)

时间:2015-11-14 05:36:32

标签: javascript function

我首先要说的是,在数字方面我很糟糕。无论如何,我正在编写一个函数'testPrime',它接受一个#作为参数,如果数字为prime则返回true,否则返回false。

代码:

function testPrime(n) {

 if (n % 2 !== 0 && n % 3 !== 0) {
    return true; 
 } else { 
    return false;
  }
};

所以我不太确定这是否正确(是吗?)但是当我通过输入testPrime(这里插入数字)在控制台上测试了大量数字时,似乎只有2和3被返回为假,当他们应该被归还为真。 (2和3是素数......对吗?)我在if语句中留下了什么?似乎无法找到问题。帮助将不胜感激。谢谢。

4 个答案:

答案 0 :(得分:3)

您好,您只将数字除以2和3,这不是找到素数的正确方法。因为有些数字只能被素数整除。例如,49不是素数,因为它只能被7整除。所以我们必须考虑所有素数小于输入数量的一半。您可以查看以下代码以供参考。它会检查数字是否为素数。

''' 
   This is single line. 
   This is second long line 
   ... continue from previous line. 
   This third single line. 
'''
var n = 29;
var flag = true;
for(var i=2; i<n/2;i++){
  if(n%i == 0){
    flag = false;
    break;
  }
}
var docElem = document.getElementById("test");
if(flag){
  docElem.innerHTML = n + " is Prime number";
}else{
  docElem.innerHTML = n + " is not a Prime number";
}

答案 1 :(得分:1)

在给定的代码中,您仅针对2和3测试了素数。因此,如果n = 25,则程序将返回true,即使25不是素数,因为25将仅检查2而3则不是5。

您应该通过添加循环来编写代码如下:

for (i=2 ; i<n ;)
if (n%i == 0) {
    return false;
    i++; 
    } 
    else { 
    return true;
  }

答案 2 :(得分:1)

呃......我的手上有太多时间。无论如何,我可能继续收集项目可以被整除的数字,虽然这增加了许多额外的计算(如果你只想要素数,你可以在第一次之后停止)。

HTML:

<div class="primeTest">
    <label>Enter a number</label><input type='text' id="number" class="input"/>
    <div class="results"></div>
    <div class="divisibleBy"></div>
</div>

脚本:

var test = function(n){
    var max = Math.sqrt(n),
        t = 2,
        divBy = [],
        str;
    if (!(n > 1 && n < 4)) {
        while (t <= max) {
            if (n % t === 0) divBy.push([t,n/t]);
            t++;
        }
    }
    if (divBy.length) {
        var str = '';
        divBy.forEach( function(d){
            str += '<div>' + d[0] + ' * ' + d[1] + '</div>';
        });
        $('.results').html( n + ' is NOT a prime number.');
        $('.divisibleBy').html( 'It is a product of each of the following:' + str );
    } else {
    $('.results')
        .html(n + ' IS a prime number.')
        .addClass('prime');
    }
}
$('.input').keyup(function() { test( this.value ) });

这是一个小提琴: https://jsfiddle.net/mckinleymedia/upvjuh51/3/

答案 3 :(得分:0)

你也可以使用递归, 试试这个功能:

var x = 2;
function testPrime(n) {
 if(n == x){
    return true;
 }
 else if((n > x) && (n%x == 0) ){
   return false;
 }
 else if((n > x) && (n%x != 0)){
   x++;
   testPrime(n);
 }
}