scala 常用计算工具类

有时候标号是用质数相乘得到的,想知道有多少个标号就需要分解质因数。
这里的注意点是,直接import scala.util.control.Breaks._
在函数中直接使用breakable和break,
不要import scala.util.control._然后在函数中val loop = new Breaks,再loop. breakable 和loop.break(),
因为Breaks没有继承序列化的代码,无法序列化分发,这样写只能单机跑,放在map或者udf中就会报无法序列化的错误
分解质因数

import scala.util.control._
import scala.util.control.Breaks._
import scala.collection.mutable.ArrayBuffer
import scala.util.control._
  //分解质因数
  def calculatePrimeFactors(n:Int,value:scala.collection.mutable.ArrayBuffer[Int]):scala.collection.mutable.ArrayBuffer[Int] =
  {
    //val loop = new Breaks //import scala.util.control._会报序列化的错,
    // 直接在外面import scala.util.control.Breaks._
    breakable
    {
      for (i <- 2 to (n / 2 + 1))
      {
        if (n % i == 0)
        {
          value.append(i)
          calculatePrimeFactors(n.toInt / i, value)
          break()
        }
        if (i >= n / 2 - 1)
        {
          value.append(n.toInt)
          break()
        }
      }
    }
    value
  }

你可能感兴趣的:(scala 常用计算工具类)