【问题标题】:Do not understand code to test if a number is prime or not不懂测试数字是否为素数的代码
【发布时间】:2016-03-02 18:21:45
【问题描述】:

我在网上找到了这段代码。它不是我自己的。这是一个测试给定数字是否为素数的函数。该代码用于确定一个数字是否为素数。我只是不明白它是如何工作的。

function test_prime(n)  
{  

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

alert(test_prime(25)); 

第一个 if 和 else if 语句对我来说很有意义。如果 n 等于 1,则返回 false,因为 1 不是素数。否则,如果 n 等于 2,则返回 true,因为 2 是质数。

else 语句中的所有内容对我来说都没有意义。如果调用函数测试25,不是素数,25%x,x=2,等于1。那为什么函数会返回false呢?

我知道 for 循环有一些我不理解的地方。

【问题讨论】:

  • 在 x=2 的 n=25 的情况下,该函数不会返回 false。循环将继续增加 x 直到 x=5,此时它会发现 n 可以被 x 整除,then 返回 false。另请注意,此函数的用途非常低效。

标签: javascript primes


【解决方案1】:

如果 n 既不是 1 也不是 2,则取 2 到 n 之间的数字范围,并检查 n 是否可以被这些数字中的任何一个整除。如果是,那么它不是素数,所以你返回 false。如果范围内的数字都不能整除n,则n 必须是素数。

【讨论】:

  • Ahhhhh 当然... for 循环代码将一直运行,直到 x 比 n 小 1... 出于某种原因,我认为 for 循环在第一次运行后结束。谢谢!
【解决方案2】:

else块的解释

else  
  {  
    for(var x = 2; x < n; x++)  // Iterating over possible divisors i.e number - 1
    {  
      if(n % x === 0) // Checking whether the number is divisible by any number, if it is then return false i.e. number is not a prime number  
      {  
        return false;  
      }  
    }  
    // If the number is not divisible by any number return true
    return true;    
  }  

【讨论】:

    【解决方案3】:
       for(var x = 2; x < n; x++)  
        {  
          if(n % x === 0)  
          {  
            return false;  
          }  
    
    }
    

    我想你会这样看:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html

    x 的值介于 2 和 n-1 之间。当您在循环中时,x 的值会发生变化:首先是 x=1,然后是 x=2,后来是 x=3……当 x=5 时,条件为真,然后返回假。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多