素数 Swift 3

Prime Numbers Swift 3

经过几个小时的谷歌搜索,我仍然处于停滞状态。如果有人指出我的公式或编码选择中的错误,我将不胜感激。请记住我是 Swift 的新手。我不习惯非 C 风格的 for 循环。

    if textField.text != "" {
        input = Double(textField.text!)!    // parse input

        // return if number less than 2 entered
        if input < 2 {
            resultLabel.text = "Enter a number greater than or equal to 2."

            return;
        }

        // get square root of input and parse to int
        inputSquared = Int(sqrt(input));

        // loop from 2 to input iterating by 1
        for i in stride(from: 2, through: input, by: 1) {
            if inputSquared % Int(i) == 0 {
                resultLabel.text = "\(Int(input)) is not a prime number."
            }
            else {
                resultLabel.text = "\(Int(input)) is a prime number!"
            }
        }
    }

我不知道如何找到质数的公式。在查找了多个公式后,我已经确定了这个。然而,每个结果都是质数。所以我的if条件是错误的。我只是不知道如何解决它。

检查我的 algorithm.It works.But 我不确定这是一个有效的素数算法

   var input:Int = 30
    var isPrime:Bool = true


if(input == 2){
    print("Input value 2 is prim number")
}
else if(input < 2){
    print("Input value must greater than 2")
}
else{
for i in 2...input-1{
    if((input%i) == 0){
        isPrime = false
        break;
    }
}
if(isPrime){
    print("Your Input Value \(input) is Prime!")
}
}

在 playground 中尝试此代码你会得到更好的想法,并在尝试 swift 时尝试使用 playground,因为你不熟悉 swift playground 是最好的。

let input = 13 // add your code that take value from textfield
var prime = 1

// throw error less than 2 entered
if input < 2 {
    assertionFailure("number should be 2 or greater")
}

// loop from 2 to input iterating by 1
for i in stride(from: 2, to: input, by: 1) {
    if input % i == 0{
        prime = 0
    }
}

if prime == 1 {
    print("\(input) number is prime")
} else {
    print("\(input) number is not prime")
}

已经发布了一些可行的解决方案,但其中 none 解释了为什么您的解决方案不起作用。然而,有些评论接近。

你的基本问题是你取输入的平方根,然后从 2 迭代到输入检查平方根的整数部分是否能被 i 整除。你弄错了。您需要从 2 迭代到平方根并检查输入是否可以被 i 整除。如果是,则停止,因为输入不是素数。如果你走到最后没有找到一个除数,你就有了一个素数。