我有以下代码来生成素数。但是,它不是生成素数,而是生成从2到数字的整个列表,该数字被输入到函数中。怎么解决这个?
var i = 2;
var primeCheck = function(number){
while(i<number){
if(number%i===0)
{
break;
}
i++;
}
if (i===number)
{
return true;
}
};
var primeGen = function(limit){
for(k=2; k<=limit; k++)
{
if(primeCheck(k)){
console.log(k);
}
}
};
primeGen(10);
&#13;
编辑:我意识到我对自己的问题不太清楚。所以我更新了它。我的猜测是&#34;返回true&#34;造成这种滋扰。因此我基于此问了我之前的问题。
答案 0 :(得分:1)
在您想要提醒的条件下使用primeCheck(11)
你的逻辑中有一些错误,当我尝试使用primeCheck(12)时,它没有给出预期的结果。
var i = 2;
var primeCheck = function(number){
while(i<Math.floor(Math.sqrt(number))){
if(number%i===0)
{
alert("Not a prime");
break;
}
i++;
}
if (i===Math.floor(Math.sqrt(number)))
{
return true;
}
};
//now check for prime or not prime
if(primeCheck(11))
{
alert("prime");
}
if(!primeCheck(12))
{
alert("not prime");
}
&#13;
答案 1 :(得分:1)
返回警报的if条件与不带参数的primecheck()一起运行。纠正它:
if(primeCheck(11)){
警报( “素”);
}
此外,通过调用primeCheck(11)删除最后一行。
答案 2 :(得分:1)
如果您想要返回return
而不是alert; break
。我会考虑重构这个。首先,你永远不应该有一个函数来执行这样一个简单的任务依赖外部变量。保持模块化。
function isPrime(num) {
for (var i = 2; i < num; i++) {
if (num % i === 0) {
return false;
}
}
return num > 1
}
如果数字是素数,则返回true,否则返回false。这很有用,因为您现在可以灵活地使用它做多件事。如果你想返回true或false,它会这样做。如果你想输出其他东西,比如&#34; prime&#34;或者&#34;不是素数&#34;它很容易进一步包装。
function isPrimeText(num) {
return isPrime(num) ? "Prime" : "Not Prime"
}