久しぶりに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) }