scala 常用计算工具类
2021-08-05 本文已影响0人
wong11
有时候标号是用质数相乘得到的,想知道有多少个标号就需要分解质因数。
这里的注意点是,直接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
}