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变量也没有意义,因为返回语句中存在函数