Scala: Project Euler: Problem 5
November 25th, 2009
Problem:
What is the smallest number divisible by each of the numbers 1 to 20?
object Problem5 {
def main(args : Array[String]) : Unit = {
println(solve(20))
}
def solve(number:Int) : Long = {
var lcm = 1L
for( i <- 2.to(number); if(isPrime(i))) {
val multiplesOfI = countPowersOfN(i, number)
lcm *= power(i, multiplesOfI)
}
return lcm
}
def power(n:Int, m:Int) : Long = {
var pow = 1
for( i <- 1.to(m)) pow = pow * n
return pow
}
def isPrime(number:Int) : Boolean = {
for {
n <- 2.to(Math.sqrt(number))
} if (number % n == 0) return false
return true
}
def countPowersOfN(n:Int, number:Int) : Int = {
if(n < 2) throw new IllegalArgumentException("n should be >= 2")
if(number < n) return 0
return 1 + countPowersOfN(n, number/n)
}
}