Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin中出现错误10001素数_Kotlin_Primes - Fatal编程技术网

Kotlin中出现错误10001素数

Kotlin中出现错误10001素数,kotlin,primes,Kotlin,Primes,我的代码: 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

我的代码:

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)}")
}
import java.util*
fun checkPrime(n:Int):布尔值{
val z=n/2
var停止=错误
如果(n==0 | | n==1){
停止=正确
返回错误
}
对于(i在2..z中){
如果(n%i==0){
停止=正确
返回错误
打破
}
}
回来!停下
}
趣味主线(args:Array){
var primes=ArrayList()
//“500000”可以替换为任何数字,因此您至少可以获得100001个素数
对于(i在2..500000中){
if(检查素数(i)){
素数.加上(i)
}
}
println(“完成”)
println(“数组大小:${primes.Size}”)
println(“10001st素数:${primes.get(index=10001)}”)
}

我是科特林的新手,所以你可能觉得这很可怕。当我运行它时,我得到104759,这是错误的。这里的错误在哪里?我的素数检查函数不正确吗?谢谢。

或者,您可以使用Java内置的质数检查器和由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())
}
import java.math.biginger
导入kotlin.coroutines.experimental.buildSequence
fun primes()=构建序列{
变量n=1
while(true){
if(BigInteger(“$n”).isProbablePrime(1)){
产量(n)
}
n++
}
}
趣味主线(args:Array){
println(primes().take(10001.last())
}

素数的形式为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;
}
fun isPrime(数字:Int):布尔值
{

如果(数字)您的程序是正确的,但您正在检查第10002个素数(因为索引从0开始),这实际上是104759。另外,您的z应该是n的平方根,而不是
n/2
;而且使用stop变量也没有意义,因为返回语句中存在函数