Scala始め
ブログなぞを始めてみた次第でアリマス。
とりあえず、Scalaで素数判定プログラムを書いてみましたわ。
returnを使わずに結果リストも生成するコードにするにはどうすればよいのかしら。
import scala.math.sqrt object PrimeNumber { val START_NUMBER = 2 def main(args: Array[String]): Unit = { checkArgs(args) val primeNumbers = getPrimeNumbers(args(0).toInt) println("Prime Number Count = "+primeNumbers.length) primeNumbers.foreach(println(_)) } def checkArgs(args: Array[String]): Unit = { if (args.length > 1) throw new IllegalArgumentException("usage 1 argument!!") println("argument = "+args(0)) if (!args(0).forall(_.isDigit)) throw new IllegalArgumentException("argument must be natural number") if (args(0).toInt < 2) throw new IllegalArgumentException("argument must be natural number") } def getPrimeNumbers(maxNumber: Int): List[Int] = { checkPrimeNumber(START_NUMBER+1, maxNumber, List(START_NUMBER)) } def checkPrimeNumber(number: Int, maxNumber: Int, primeNumbers: List[Int]): List[Int] = { if (number > maxNumber) return primeNumbers //判定値の平方根以下で最大の整数を求めておく(最大の約数はその数の平方根) val squareVal = sqrt(number).intValue() //既知の素数で割り切れるかの判定 for (primeNumber <- primeNumbers; if (primeNumber <= squareVal)) { if (number % primeNumber == 0) //割りきれる場合は次の数の判定に移る return checkPrimeNumber(number+1, maxNumber, primeNumbers) } //割りきれない場合は素数なのでリストに追加して次の数の判定を行う checkPrimeNumber(number+1, maxNumber, primeNumbers ::: List(number)) }