我首先要说的是,在数字方面我很糟糕。无论如何,我正在编写一个函数'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语句中留下了什么?似乎无法找到问题。帮助将不胜感激。谢谢。
答案 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 ) });
答案 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);
}
}