hangscer

scala写算法-分解质因数

2017/02/28

scala写算法-分解质因数

比如525=7*5*5*3,那么如何使用scala来编码呢(使用尾递归)?

1
2
3
4
5
6
7
8
9
10
11
12
13
def isPrime(n:Int)=(2 to n-1).exists(n% _ ==0).unary_!
@tailrec
def fun(number:Int,result:List[Int]):List[Int]={
if(isPrime(number)) return number::result
val factorOption=(2 to number-1).filter(isPrime).find(n=>number%n==0)
if(factorOption.nonEmpty){
val factor=factorOption.get
fun(number/factor,factor::result)
}else{
return result
}
}
println(fun(525,List())) // List(7, 5, 5, 3)

还可以使用选筛法,我再想想该如何将scala优美的函数式与此算法结合!!!