久しぶりにScala。で、頭の体操

ココ最近、書いてなかったので復習と頭の体操をかねてScala
素数を求めるプログラムを書いてみる。

まず、素数とは?

1とその数以外のどんな自然数によっても割り切れない数字

のこと
で、作った。

def printPrimeNumber(x: int) = {
    def f(x: int): boolean = {
        if(x == 1){
            return false
        }else{
            for(a <- 2 to (x - 1)){
                if(x % a == 0)
                    return false
            }
        }
        return true
    }
    for(i <- 1 to x){
        if(f(i))
            println(i)
    }
}

とりあえず、1のときは、素数でないとして、それ以外は2〜ある数までを
総当りで割ってみて割り切れたら素数でないとしてみた。
総当りで割るので、数がでかいともっさり動作になってしまう。

まだまだ改良の余地ありだな。

おまけで、最大公約数と最小公倍数を求めるのも作ってみた。

//最大公約数
def gcd(x: Int, y: Int): Int = {
    if(y == 0) x
    else gcd(y, (x % y))
}

//最小公倍数
def lcm(x: Int, y: Int): Int = {
    if(x == 0 || y == 0) 0
    else (x * y) / gcd(x, y)
}