【发布时间】:2018-04-18 19:08:30
【问题描述】:
我的代码:
import java.util.*
fun checkPrime(n : Int): Boolean{
val z = n/2
var stop = false
if(n == 0 || n == 1){
stop = true
return false
}
for(i in 2..z){
if(n % i == 0){
stop = true
return false
break
}
}
return !stop
}
fun main(args : Array<String>){
var primes = ArrayList<Int>()
//The "500000" can be replaced with any number so you get at least 100001 primes
for(i in 2..500000){
if(checkPrime(i)){
primes.add(i)
}
}
println("Finished")
println("Size of Array: ${primes.size}")
println("10001st Prime: ${primes.get(index = 10001)}")
}
我是 Kotlin 的新手,所以这对你来说可能看起来很可怕。当我运行它时,我得到 104759,这是错误的。这里的错误在哪里?我的素数检查功能不正确吗?谢谢。
【问题讨论】:
-
您的程序是正确的,但您正在检查第 10002 个素数(因为索引从 0 开始),它确实是 104759
-
另外,你的 z 应该是 n 的平方根,而不是
n/2;使用 stop 变量也没有意义,因为函数存在于 return 语句中