一种函数,用于确定Scala中foldLeft的参数中是否有一个数字是另一个数字的因子

时间:2012-12-29 13:19:48

标签: scala functional-programming primes

我正在尝试在Scala中定义一个函数,以确定数字是否为素数,如下所示:

def isPrime(n: Int): Boolean = {
   if (n == 2) true
   else {
      List(3 to math.sqrt(n)).foldLeft(isFactor(),0)
   }
   def isFactor(x:Int, n:Int):Boolean=(n%x)==0
}

给我foldLeft调用的参数是什么,因为我已经定义了isFactor?

2 个答案:

答案 0 :(得分:2)

我想你想找到列表中的任何项目是否为n的因子。因此,对于空列表,您应该以false开头,因为空列表不包含n的因子。但是,您必须将收集的结果与isFactor结果进行比较。最简单的当然是检查list.exists(...) - 方法。

答案 1 :(得分:0)

感谢@thoredge的建议,我已经能够使用exists()做到这一点,如下所示:

def isPrime(n: Int): Boolean = n match {
  case 2 => true
  case _ => !(2 to math.sqrt(n).ceil.toInt).exists((x) => n % x == 0)
}