Home > scala > Scala: Project Euler: Problem 5

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)
    }
}

scala

  1. No comments yet.
  1. No trackbacks yet.