有時候標號是用質數相乘得到的,想知道有多少個標號就需要分解質因數。
這里的注意點是,直接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
}