为什么我只得到2和3作为假?(如果数字是素数,则返回true)
why am I getting only 2 and 3 as false? (returns true if number is prime)
我首先会说,在数字方面我很糟糕。无论如何,我正在编写一个函数"testPrime",它接受#作为参数,如果数字是素数则返回true,如果不是素数则返回false。
代码:
function testPrime(n) {
if (n % 2 !== 0 && n % 3 !== 0) {
return true;
} else {
return false;
}
};
所以我不太确定这是否正确(是吗?),但当我在控制台上通过键入testPrime(在这里插入数字)测试出大量数字时,似乎只有2和3被返回为假,而它们应该被返回为真。(2和3是素数…对吧?)我在if语句中遗漏了什么吗?似乎找不到问题。我们将不胜感激。谢谢
你好,你只将数字除以2和3,这不是找到素数的正确方法。因为有些数字只能被素数整除。例如,49不是素数,因为它只能被7整除。所以我们必须考虑所有素数小于输入数的一半。您可以查看以下代码以供参考。它会检查这个数字是否素数。
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";
}
<div id="test"><div>
在给定的代码中,您只测试了2和3的素数。因此,如果n=25,那么即使25不是素数,程序也会返回true,因为25将只检查2,3而不是5。
您应该通过添加一个循环来编写如下代码:
for (i=2 ; i<n ;)
if (n%i == 0) {
return false;
i++;
}
else {
return true;
}
嗯。。。我手头的时间太多了。无论如何,我可能会继续收集该项可被整除的数字,尽管这会增加很多额外的计算(如果你只想要素数,你可以在第一个之后停止)。
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/
您还可以使用递归,试试这个功能:
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);
}
}
相关文章:
- 如果元素's的ID以数字开头
- 如果数字已插入排序数组,则获取该数字的索引
- 对象获胜'如果qml中的其他地方定义了数字动画属性,则t设置动画
- Javascript-使用“”将toDateStringMonth从文本字符串解析为数字字符串;如果“;vs“;开关”;
- 为什么 JavaScript 如果一个数字有一个前导零,就将其视为八进制
- 如果类中的数字大于0,请使用JavaScript更改CSS背景
- 如果类只包含一个特定数字,则向元素添加类
- Javascript Regexp :如果一个字母与一个数字相邻,请添加下划线
- Regex:只有字母数字,但如果这是纯数字,则不能
- 如果数字以1结尾,做点什么
- JavaScript:仅按字符或按字符+数字(如果存在)拆分字符串
- 如果随机数字是3-Javascript的倍数,则将表单元格更改为红色
- 如果输入类型=数字,则maxlength=5不起作用
- 如果在JavaScript w/HTML中选择了特定国家/地区,如何要求邮政编码为数字
- 如果语句是假的 JavaScript,则再次随机化数字
- Javascript 和正则表达式:删除除第一个字符之外的 evryting,如果是一个数字
- 如果数字超过 10,则将数字重置为 1
- 如果不是字母数字,则忽略上次键入的内容
- 如何检查输入是否为数字?如果是字符串警报错误
- 在数组中搜索数字.如果不存在,则在 Javascript 中返回较低的值