我的代码:
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,这是错误的。这里的错误在哪里?我的主要检查功能不正确吗?感谢。
答案 0 :(得分:0)
或者,您可以使用Java内置的Prime数字检查器和由buildSequence生成的Kotlin无限序列。
确保使用take()选择要提取的元素数。
import java.math.BigInteger
import kotlin.coroutines.experimental.buildSequence
fun primes() = buildSequence {
var n = 1
while (true){
if (BigInteger("$n").isProbablePrime(1)){
yield(n)
}
n++
}
}
fun main(args: Array<String>) {
println(primes().take(10001).last())
}
答案 1 :(得分:-1)
素数的形式为6f±1,不包括2和3,其中f是任何整数
fun isPrime(number: Int) : Boolean
{
if (number <= 1)
{
return false;
}
// The check for the number 2 and 3
if (number <= 3)
{
return true;
}
if (number%2 == 0 || number%3 == 0)
{
return false;
}
for (i in 5..number/2 step 6)
{
if (number%i == 0 || number%(i+2) == 0)
{
return false;
}
}
return true;
}
解决方案的时间复杂度:O(sqrt(n))