我是序列的新手,所以我可能(或多或少)做了一些非常错误的事情,但我有一个问题:
我写了两个函数:
fun isPrimeNumber1(number: Int): Boolean {
if (number <= 1) return false
for (divider in 2 .. number / 2) {
if ( number % divider == 0 ) return false
}
return true
}
和
fun isPrimeNumber2(number: Int): Boolean {
if (number <= 1) return false
return !(2 .. number / 2).asSequence().map { it }.any { number % it == 0 }
}
现在我正在运行一个用 编写的测试kotest
,其中两个函数都接收Int.MAX_VALUE
为number
.
class MyTestPrime : FunSpec({
context("Prime numbers") {
test("Should return true if number is prime (1st fun)") {
isPrimeNumber1(Int.MAX_VALUE) shouldBe true
}
test("Should return true if number is prime (2nd fun)") {
isPrimeNumber2(Int.MAX_VALUE) shouldBe true
}
}
})
该功能的执行时间isPrimeNumber1()
约为 3.5 秒,而第二个功能的执行时间isPrimeNumber2()
约为 8.5 秒。
为什么呢?我错过了关于序列的东西吗?或者也许我的代码以正确但非常不理想的方式实现其目的?