我一直在尝试在 Scala中解决 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 的第一部分,我想我会问,我犯了哪些可怕的罪行?我的解决方案是多么不理想?我践踏了哪些约定?
谢谢!