Scala 有没有更有效的方法使用递归函数检查一个数是否为素数?
我正在编写一个递归函数来检查非负整数在SCALA中是否为素数。我的函数需要两个输入。这是我的密码:Scala 有没有更有效的方法使用递归函数检查一个数是否为素数?,scala,recursion,primes,Scala,Recursion,Primes,我正在编写一个递归函数来检查非负整数在SCALA中是否为素数。我的函数需要两个输入。这是我的密码: import io.StdIn._ def isPrime (x:Int, i:Int): Boolean = { if (i < 3) { true }else if (x % i == 0) { false }else{ isPrime(x,i-1) } } print("Enter a number to check if it is
import io.StdIn._
def isPrime (x:Int, i:Int): Boolean = {
if (i < 3) {
true
}else if (x % i == 0) {
false
}else{
isPrime(x,i-1)
}
}
print("Enter a number to check if it is a prime number: " )
val num1 = readInt()
println(isPrime(num1,num1-1))
导入io.StdIn_
def isPrime(x:Int,i:Int):布尔={
如果(i<3){
真的
}else如果(x%i==0){
假的
}否则{
iPrime(x,i-1)
}
}
打印(“输入一个数字以检查它是否是质数:”)
val num1=readInt()
println(isPrime(num1,num1-1))
我的问题是,有没有办法将一个输入作为函数的参数?代码必须使用递归函数。我知道有更有效的方法来检查一个数是否为素数(可能使用迭代),但我只是把它作为一个实践问题来做。我甚至可以说,用调用函数包装递归函数是非常好的,即使是标准实践。例如:
def isPrime( x:Int ) = {
def recIsP( n:Int, i:Int ) : Boolean = i == n || n % i != 0 && recIsP(n, i + 1)
recIsP(x,2)
}
isPrime(3301)
一种选择是创建一个内部方法
def isPrime(x:Int): Boolean = {
def loop(i: Int): Boolean =
if (i<3 ) {
true
} else if (x % i==0) {
false
} else {
isPrime(x,i-1)
}
loop(x, x - 1)
}
您的代码中有一个错误:4不应该是prime。Define effective。您可以预先计算素数,然后检查缓存,您可能希望搜索不存在缓存的数字,您可以在内存限制下操作,或者完全优化速度。根据需求,我们可以回答这个问题。我认为你的函数调用4是素数。如果你说的是时间复杂度,我建议你只将数字除以sqrt,否则你也可以寻找埃拉托斯烯筛。
def isPrime(x: Int, j: Int = 1): Boolean = {
val i = x - j
if (i < 3) {
true
} else if (x % i==0) {
false
} else {
isPrime(x, j + 1)
}
}