有時(shí)候標(biāo)號(hào)是用質(zhì)數(shù)相乘得到的,想知道有多少個(gè)標(biāo)號(hào)就需要分解質(zhì)因數(shù)。
這里的注意點(diǎn)是,直接import scala.util.control.Breaks._
在函數(shù)中直接使用breakable和break,
不要import scala.util.control._然后在函數(shù)中val loop = new Breaks,再loop. breakable 和loop.break(),
因?yàn)锽reaks沒有繼承序列化的代碼,無(wú)法序列化分發(fā),這樣寫只能單機(jī)跑,放在map或者udf中就會(huì)報(bào)無(wú)法序列化的錯(cuò)誤
分解質(zhì)因數(shù)
import scala.util.control._
import scala.util.control.Breaks._
import scala.collection.mutable.ArrayBuffer
import scala.util.control._
//分解質(zhì)因數(shù)
def calculatePrimeFactors(n:Int,value:scala.collection.mutable.ArrayBuffer[Int]):scala.collection.mutable.ArrayBuffer[Int] =
{
//val loop = new Breaks //import scala.util.control._會(huì)報(bào)序列化的錯(cuò),
// 直接在外面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
}