私はScalaでプロジェクトEuler number in 3を解決しようとしてきたが、これは私がこれまで持っているものです:私は仕事だろうと思うが、私は」プロジェクトオイラー - スカラ
def largestPrimeFactor(in:BigInt) : Option[BigInt] = {
def isPrime(in:BigInt) : Boolean = {
def innerIsPrime(in:BigInt, currentFactor:BigInt) : Boolean = {
if(in % currentFactor == 0) {
false
}
else {
if(currentFactor > (in/2)){
true
}
else {
innerIsPrime(in, currentFactor + 1)
}
}
}
innerIsPrime(in, 2)
}
def nextLargeFactor(in:BigInt, divisor:BigInt) : (Option[BigInt], BigInt) = {
if((in/2) > divisor) {
if(in % divisor == 0) (Some(in/divisor), divisor)
else nextLargeFactor(in, divisor + 1)
}
else
(None, divisor)
}
def innerLargePrime(in : BigInt, divisor:BigInt) : (Option[BigInt], BigInt) = {
nextLargeFactor(in, divisor) match {
case (Some(factor), div) => {
if(isPrime(factor)) (Some(factor), div)
else innerLargePrime(in, div + 1)
}
case (None, _) => (None, divisor)
}
}
innerLargePrime(in, 2)._1
}
(遅いビルド中に時間を使います)、SimplyScalaサービスしか持っていません - タイムアウトしています(私は自宅でチェックします)。
これはScalaの最初のビットですから、私が書いた長さのうち、私は尋ねると思っていました。私は恐ろしい罪を犯しましたか?どのように絶望的に私の解決策が最適ではありませんか?私は何の慣習を踏みにじったのですか?
ありがとうございます!
でその数はBigInt' 'よりもはるかに高速である' Long'、です。 –